AES加解密(C#和JAVA互通)


對接接口中遇到一個棘手的問題:甲方使用java開發,通過AES加密數據,我方使用C#開發,Java的代碼和C#的代碼無法互通。

 1         /// <summary>
 2         /// AES加密(128位,密碼模式ECB,填充類型PKCS5Padding或者PKCS7Padding。注:ECB模式不需要初始化向量iv。)
 3         /// </summary>
 4         /// <param name="str"></param>
 5         /// <param name="key"></param>
 6         /// <returns></returns>
 7         public static string AES_Encrypt(string str, string key)
 8         {
 9             if (string.IsNullOrEmpty(str)) return null;
10             Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
11 
12             RijndaelManaged rm = new RijndaelManaged
13             {
14                 Key = Convert.FromBase64String(key),
15                 Mode = CipherMode.ECB,
16                 Padding = PaddingMode.PKCS7
17             };
18 
19             ICryptoTransform cTransform = rm.CreateEncryptor();
20             Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
21             StringBuilder ret = new StringBuilder();
22             foreach (byte b in resultArray.ToArray())
23             {
24                 ret.AppendFormat("{0:X2}", b);
25             }
26             return Convert.ToBase64String(resultArray, 0, resultArray.Length);
27         }
 1         /// <summary>
 2         /// AES解密(128位,密碼模式ECB,填充類型PKCS5Padding或者PKCS7Padding。注:ECB模式不需要初始化向量iv。)
 3         /// </summary>
 4         /// <param name="toDecrypt"></param>
 5         /// <param name="key"></param>
 6         /// <returns></returns>
 7         public static string AES_Decrypt(string toDecrypt, string key)
 8         {
 9             byte[] keyArray = Convert.FromBase64String(key); //將TestGenAESByteKey類輸出的字符串轉為byte數組
10             byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);
11             RijndaelManaged rDel = new RijndaelManaged();
12             rDel.Key = keyArray;
13             rDel.Mode = CipherMode.ECB;        //必須設置為ECB
14             rDel.Padding = PaddingMode.PKCS7;  //必須設置為PKCS7
15             ICryptoTransform cTransform = rDel.CreateDecryptor();
16             byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
17             return UTF8Encoding.UTF8.GetString(resultArray);
18 
19         }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM