CryptoJS与C#AES加解密互转CryptoJS下载地址:
页⾯js引⽤:
<script type="text/javascript" src="/content/plugin/CryptoJSv3.1.2/components/core-min.js"></script>
<script type="text/javascript" src="/content/plugin/CryptoJSv3.1.2/rollups/aes.js"></script>
JS端AES加密解密:
1    com.str = {
2        _KEY: "12345678900000001234567890000000",//32位
3        _IV: "1234567890000000",//16位
4/**************************************************************
5        *字符串加密
6        *  str:需要加密的字符串
7        ****************************************************************/
8        Encrypt: function (str) {
9var key = Utf8.parse(this._KEY);
10var iv = Utf8.parse(this._IV);16进制字符串转16进制数组
11
12var encrypted = '';
13
14var srcs = Utf8.parse(str);
15            encrypted = pt(srcs, key, {
16                iv: iv,
17                mode: de.CBC,
18                padding: CryptoJS.pad.Pkcs7
19            });
20
21return String();
22        },
23
24/**************************************************************
25        *字符串解密
26        *  str:需要解密的字符串
27        ****************************************************************/
28        Decrypt: function (str) {
29var key = Utf8.parse(this._KEY);
30var iv = Utf8.parse(this._IV);
31var encryptedHexStr = Hex.parse(str);
32var srcs = Base64.stringify(encryptedHexStr);
33var decrypt = CryptoJS.AES.decrypt(srcs, key, {
34                iv: iv,
35                mode: de.CBC,
36                padding: CryptoJS.pad.Pkcs7
37            });
38var decryptedStr = Utf8);
String();
40        }
41    }
C# AES加密解密:
const string AES_IV = "1234567890000000";//16位
///<summary>
/// AES加密算法
///</summary>
///<param name="input">明⽂字符串</param>
///<param name="key">密钥(32位)</param>
///<returns>字符串</returns>
public static string EncryptByAES(string input, string key)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 32));
using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
{
aesAlg.Key = keyBytes;
aesAlg.IV = Encoding.UTF8.GetBytes(AES_IV.Substring(0, 16));
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(input);
}
byte[] bytes = msEncrypt.ToArray();
return ByteArrayToHexString(bytes);
}
}
}
}
///<summary>
/
// AES解密
///</summary>
///<param name="input">密⽂字节数组</param>
///<param name="key">密钥(32位)</param>
///<returns>返回解密后的字符串</returns>
public static string DecryptByAES(string input, string key)
{
byte[] inputBytes = HexStringToByteArray(input);
byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 32));
using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
{
aesAlg.Key = keyBytes;
aesAlg.IV = Encoding.UTF8.GetBytes(AES_IV.Substring(0, 16));
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream(inputBytes))
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srEncrypt = new StreamReader(csEncrypt))
{
return srEncrypt.ReadToEnd();
}
}
}
}
}
///<summary>
///将指定的16进制字符串转换为byte数组
///</summary>
///<param name="s">16进制字符串(如:“7F 2C 4A”或“7F2C4A”都可以)</param>
///<returns>16进制字符串对应的byte数组</returns>
public static byte[] HexStringToByteArray(string s)
{
s = s.Replace("", "");
byte[] buffer = new byte[s.Length / 2];
for (int i = 0; i < s.Length; i += 2)
buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
return buffer;
}
///<summary>
///将⼀个byte数组转换成⼀个格式化的16进制字符串
///</summary>
///<param name="data">byte数组</param>
///<returns>格式化的16进制字符串</returns>
public static string ByteArrayToHexString(byte[] data)
{
StringBuilder sb = new StringBuilder(data.Length * 3);
foreach (byte b in data)
{
//16进制数字
sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));
//16进制数字之间以空格隔开
//sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
}
return sb.ToString().ToUpper();
}
⽤法:
com.str.Encrypt("2017-05")//结果:68f4a7903a9fe6085d2301ac68cc039c
com.str.Decrypt("68f4a7903a9fe6085d2301ac68cc039c")//结果:2017-05
//加密
string str1 = Encrypt.EncryptByAES("2017-05", "12345678900000001234567890000000");
//解密
string str2 = Encrypt.DecryptByAES("68f4a7903a9fe6085d2301ac68cc039c", "12345678900000001234567890000000");注:前后台的加密Key必须⼀致。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。