客户端进行AES加密,C#后台解密

客户端js代码:

 1 <script src="js/CryptoJSv3.1.2/components/core-min.js"></script>
 2 <script src="js/CryptoJSv3.1.2/rollups/aes.js"></script>
 3 
 4 //32位秘钥
 5 var _KEY = "01234567890123456789012345678912";
 6 //16位向量
 7 var _IV = "0123456789123456";
 8 
 9 //AES字符串加密
10 function Encrypt(str) {
11             var key = CryptoJS.enc.Utf8.parse(this._KEY);
12             var iv = CryptoJS.enc.Utf8.parse(this._IV);
13 
14             var encrypted = '';
15 
16             var srcs = CryptoJS.enc.Utf8.parse(str);
17             encrypted = CryptoJS.AES.encrypt(srcs, key, {
18                 iv: iv,
19                 mode: CryptoJS.mode.CBC,
20                 padding: CryptoJS.pad.Pkcs7
21             });
22             return encrypted.ciphertext.toString();
23         }
24 
25 //字符创解密
26 function Decrypt(str) {
27              var key = CryptoJS.enc.Utf8.parse(this._KEY);
28              var iv = CryptoJS.enc.Utf8.parse(this._IV);
29              var encryptedHexStr = CryptoJS.enc.Hex.parse(str);
30              var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
31              var decrypt = CryptoJS.AES.decrypt(srcs, key, {
32                  iv: iv,
33                  mode: CryptoJS.mode.CBC,
34                  padding: CryptoJS.pad.Pkcs7
35              });
36              var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
37              return decryptedStr.toString();
38          }
39 
40 
41 C#后台解密:
42 public string AES_Key = "01234567890123456789012345678912";//32位  
43         public string AES_IV = "0123456789123456";//16位  
44         /// <summary>
45         /// 将指定的16进制字符串转换为byte数组
46         /// </summary>
47         /// <param name="s">16进制字符串(如:“7F 2C 4A”或“7F2C4A”都可以)</param>
48         /// <returns>16进制字符串对应的byte数组</returns>
49         protected byte[] HexStringToByteArray(string s)
50         {
51             s = s.Replace(" ", "");
52             byte[] buffer = new byte[s.Length / 2];
53             for (int i = 0; i < s.Length; i += 2)
54                 buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
55             return buffer;
56         }
57 
58         protected string DecryptByAES(string input, string key)
59         {
60             byte[] inputBytes = HexStringToByteArray(input);
61             byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 32));
62             using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
63             {
64                 aesAlg.Key = keyBytes;
65                 aesAlg.IV = Encoding.UTF8.GetBytes(AES_IV.Substring(0, 16));
66 
67                 ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
68                 using (MemoryStream msEncrypt = new MemoryStream(inputBytes))
69                 {
70                     using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, decryptor, CryptoStreamMode.Read))
71                     {
72                         using (StreamReader srEncrypt = new StreamReader(csEncrypt))
73                         {
74                             return srEncrypt.ReadToEnd();
75                         }
76                     }
77                 }
78             }
79         }

 

原文地址:https://www.cnblogs.com/wz122889488/p/6899615.html

posted @ 2018-11-01 15:39  Chanwah  阅读(748)  评论(0编辑  收藏  举报