找回密码
 立即注册
首页 业界区 业界 C#.NET MVC 前端JS的AES加密

C#.NET MVC 前端JS的AES加密

阮蓄 昨天 15:15
C#.NET MVC 前端JS的AES加密,JQUERY,AJAX,AES ECB ,AES CBC。
 
前端先引用 CryptoJS 库。
  1. [/code]封装一个JS函数:
  2. [code]
复制代码
加密后,向后台API POST请求即可。
完整页面:
  1. @{
  2.     ViewBag.Title = "测试 JS AES 加密";
  3. }
  4.     <h1>ASP.NET</h1>
  5.     <input type="button" id="submitBtn" value="测试JS AES" class="btn btn-primary btn-lg" />
复制代码
后端实体:
  1. namespace WebAppJsAES.Models
  2. {
  3.     public class JsAesReq
  4.     {
  5.         /// <summary>
  6.         /// JS AES 加密后的串
  7.         /// </summary>
  8.         public string ciphertext { get; set; }
  9.     }
  10. }
复制代码
后端解密工具类:
  1. using System.Security.Cryptography;
  2. namespace WebAppJsAES.Utils
  3. {
  4.     public class ButtonAesUtil
  5.     {
  6.         /// <summary>
  7.         /// AES ECB PKCS7 加密
  8.         /// </summary>
  9.         /// <param name="dataByte"></param>
  10.         /// <param name="key"></param>
  11.         /// <returns></returns>
  12.         public static byte[] EncryptECB(byte[] dataByte, byte[] key)
  13.         {
  14.             var _aes = new RijndaelManaged();
  15.             _aes.Key = key;
  16.             _aes.Padding = PaddingMode.PKCS7;
  17.             _aes.Mode = CipherMode.ECB;
  18.             var _crypto = _aes.CreateEncryptor();
  19.             byte[] encrypted = _crypto.TransformFinalBlock(dataByte, 0, dataByte.Length);
  20.             _crypto.Dispose();
  21.             return encrypted;
  22.         }
  23.         /// <summary>
  24.         /// AES ECB PKCS7 解密
  25.         /// </summary>
  26.         /// <param name="encryptByte"></param>
  27.         /// <param name="key"></param>
  28.         /// <returns></returns>
  29.         public static byte[] DecryptECB(byte[] encryptByte, byte[] key)
  30.         {
  31.             var _aes = new RijndaelManaged();
  32.             _aes.Key = key;
  33.             _aes.Padding = PaddingMode.PKCS7;
  34.             _aes.Mode = CipherMode.ECB;
  35.             var _crypto = _aes.CreateDecryptor();
  36.             byte[] decrypted = _crypto.TransformFinalBlock(
  37.                 encryptByte, 0, encryptByte.Length);
  38.             _crypto.Dispose();
  39.             return decrypted;
  40.         }
  41.         /// <summary>
  42.         /// AES CBC PKCS7 加密
  43.         /// </summary>
  44.         /// <param name="encryptByte"></param>
  45.         /// <param name="key"></param>
  46.         /// <param name="iv"></param>
  47.         /// <returns></returns>
  48.         public static byte[] EncryptCBC(byte[] encryptByte, byte[] key, byte[] iv)
  49.         {
  50.             var _aes = new RijndaelManaged();
  51.             _aes.Key = key;
  52.             _aes.IV = iv;
  53.             _aes.Padding = PaddingMode.PKCS7;
  54.             _aes.Mode = CipherMode.CBC;
  55.             var _crypto = _aes.CreateEncryptor();
  56.             byte[] decrypted = _crypto.TransformFinalBlock(encryptByte, 0, encryptByte.Length);
  57.             _crypto.Dispose();
  58.             return decrypted;
  59.         }
  60.         /// <summary>
  61.         /// AES CBC PKCS7 解密
  62.         /// </summary>
  63.         /// <param name="encryptByte"></param>
  64.         /// <param name="key"></param>
  65.         /// <param name="iv"></param>
  66.         /// <returns></returns>
  67.         public static byte[] DecryptCBC(byte[] encryptByte, byte[] key, byte[] iv)
  68.         {
  69.             var _aes = new RijndaelManaged();
  70.             _aes.Key = key;
  71.             _aes.IV = iv;
  72.             _aes.Padding = PaddingMode.PKCS7;
  73.             _aes.Mode = CipherMode.CBC;
  74.             var _crypto = _aes.CreateDecryptor();
  75.             byte[] decrypted = _crypto.TransformFinalBlock(
  76.                 encryptByte, 0, encryptByte.Length);
  77.             _crypto.Dispose();
  78.             return decrypted;
  79.         }
  80.     }
  81. }
复制代码
后端API 解密:
  1. [HttpPost]
  2.         public ActionResult About(JsAesReq model)
  3.         {
  4.             string bodyStr = "";
  5.             if (model != null && !string.IsNullOrWhiteSpace(model.ciphertext))
  6.             {
  7.                 //aesKey与前端协商好
  8.                 string aesKey = "1234567890123456";
  9.                 var dataByte = ButtonAesUtil.DecryptECB(Convert.FromBase64String(model.ciphertext), Encoding.UTF8.GetBytes(aesKey));
  10.                 bodyStr = Encoding.UTF8.GetString(dataByte);
  11.             }
  12.             return Json(new
  13.             {
  14.                 code = "1000",
  15.                 msg = "请求成功:" + bodyStr,
  16.             });
  17.         }
复制代码
效果截图:
1.png

 -
总结:
AES 的算法:ECB还是CBC、KEY 和 IV 要与后端商量好。
CryptoJS.AES.encrypt 加密出来的是base64字符串。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册