C#.NET MVC 前端JS的AES加密,JQUERY,AJAX,AES ECB ,AES CBC。
前端先引用 CryptoJS 库。加密后,向后台API POST请求即可。
完整页面:- @{
- ViewBag.Title = "测试 JS AES 加密";
- }
- <h1>ASP.NET</h1>
- <input type="button" id="submitBtn" value="测试JS AES" class="btn btn-primary btn-lg" />
复制代码 后端实体:- namespace WebAppJsAES.Models
- {
- public class JsAesReq
- {
- /// <summary>
- /// JS AES 加密后的串
- /// </summary>
- public string ciphertext { get; set; }
- }
- }
复制代码 后端解密工具类:- using System.Security.Cryptography;
- namespace WebAppJsAES.Utils
- {
- public class ButtonAesUtil
- {
- /// <summary>
- /// AES ECB PKCS7 加密
- /// </summary>
- /// <param name="dataByte"></param>
- /// <param name="key"></param>
- /// <returns></returns>
- public static byte[] EncryptECB(byte[] dataByte, byte[] key)
- {
- var _aes = new RijndaelManaged();
- _aes.Key = key;
- _aes.Padding = PaddingMode.PKCS7;
- _aes.Mode = CipherMode.ECB;
- var _crypto = _aes.CreateEncryptor();
- byte[] encrypted = _crypto.TransformFinalBlock(dataByte, 0, dataByte.Length);
- _crypto.Dispose();
- return encrypted;
- }
- /// <summary>
- /// AES ECB PKCS7 解密
- /// </summary>
- /// <param name="encryptByte"></param>
- /// <param name="key"></param>
- /// <returns></returns>
- public static byte[] DecryptECB(byte[] encryptByte, byte[] key)
- {
- var _aes = new RijndaelManaged();
- _aes.Key = key;
- _aes.Padding = PaddingMode.PKCS7;
- _aes.Mode = CipherMode.ECB;
- var _crypto = _aes.CreateDecryptor();
- byte[] decrypted = _crypto.TransformFinalBlock(
- encryptByte, 0, encryptByte.Length);
- _crypto.Dispose();
- return decrypted;
- }
- /// <summary>
- /// AES CBC PKCS7 加密
- /// </summary>
- /// <param name="encryptByte"></param>
- /// <param name="key"></param>
- /// <param name="iv"></param>
- /// <returns></returns>
- public static byte[] EncryptCBC(byte[] encryptByte, byte[] key, byte[] iv)
- {
- var _aes = new RijndaelManaged();
- _aes.Key = key;
- _aes.IV = iv;
- _aes.Padding = PaddingMode.PKCS7;
- _aes.Mode = CipherMode.CBC;
- var _crypto = _aes.CreateEncryptor();
- byte[] decrypted = _crypto.TransformFinalBlock(encryptByte, 0, encryptByte.Length);
- _crypto.Dispose();
- return decrypted;
- }
- /// <summary>
- /// AES CBC PKCS7 解密
- /// </summary>
- /// <param name="encryptByte"></param>
- /// <param name="key"></param>
- /// <param name="iv"></param>
- /// <returns></returns>
- public static byte[] DecryptCBC(byte[] encryptByte, byte[] key, byte[] iv)
- {
- var _aes = new RijndaelManaged();
- _aes.Key = key;
- _aes.IV = iv;
- _aes.Padding = PaddingMode.PKCS7;
- _aes.Mode = CipherMode.CBC;
- var _crypto = _aes.CreateDecryptor();
- byte[] decrypted = _crypto.TransformFinalBlock(
- encryptByte, 0, encryptByte.Length);
- _crypto.Dispose();
- return decrypted;
- }
- }
- }
复制代码 后端API 解密:- [HttpPost]
- public ActionResult About(JsAesReq model)
- {
- string bodyStr = "";
- if (model != null && !string.IsNullOrWhiteSpace(model.ciphertext))
- {
- //aesKey与前端协商好
- string aesKey = "1234567890123456";
- var dataByte = ButtonAesUtil.DecryptECB(Convert.FromBase64String(model.ciphertext), Encoding.UTF8.GetBytes(aesKey));
- bodyStr = Encoding.UTF8.GetString(dataByte);
- }
- return Json(new
- {
- code = "1000",
- msg = "请求成功:" + bodyStr,
- });
- }
复制代码 效果截图:
-
总结:
AES 的算法:ECB还是CBC、KEY 和 IV 要与后端商量好。
CryptoJS.AES.encrypt 加密出来的是base64字符串。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |