阮蓄 发表于 2026-2-26 15:15:00

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

C#.NET MVC 前端JS的AES加密,JQUERY,AJAX,AES ECB ,AES CBC。
 
前端先引用 CryptoJS 库。
封装一个JS函数:
加密后,向后台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 解密:

      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字符串。

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

山真柄 发表于 2026-2-27 23:16:40

用心讨论,共获提升!

二艰糖 发表于 2026-2-28 05:12:54

热心回复!

杜优瑗 发表于 2026-3-8 05:16:17

鼓励转贴优秀软件安全工具和文档!

予捻 发表于 2026-3-11 06:53:35

喜欢鼓捣这些软件,现在用得少,谢谢分享!

全叶农 发表于 前天 20:02

很好很强大我过来先占个楼 待编辑

骆熙华 发表于 18 小时前

谢谢楼主提供!
页: [1]
查看完整版本: C#.NET MVC 前端JS的AES加密