客户端进行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