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字符串。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! 用心讨论,共获提升! 热心回复! 鼓励转贴优秀软件安全工具和文档! 喜欢鼓捣这些软件,现在用得少,谢谢分享! 很好很强大我过来先占个楼 待编辑 谢谢楼主提供!
页:
[1]