using System; using System.Security.Cryptography; using System.Text; namespace Alipay.AopSdk.Core.Util { internal class AlipayEncrypt { /// /// 128位0向量 /// private static readonly byte[] AES_IV = initIv(16); /// /// AES 加密 /// /// /// /// /// public static string AesEncrypt(string encryptKey, string bizContent, string charset) { var keyArray = Convert.FromBase64String(encryptKey); byte[] toEncryptArray = null; if (string.IsNullOrEmpty(charset)) toEncryptArray = Encoding.UTF8.GetBytes(bizContent); else toEncryptArray = Encoding.GetEncoding(charset).GetBytes(bizContent); var rDel = new RijndaelManaged(); rDel.Key = keyArray; rDel.Mode = CipherMode.CBC; rDel.Padding = PaddingMode.PKCS7; rDel.IV = AES_IV; var cTransform = rDel.CreateEncryptor(rDel.Key, rDel.IV); var resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray); } /// /// AES解密 /// /// /// /// /// public static string AesDencrypt(string encryptKey, string bizContent, string charset) { var keyArray = Convert.FromBase64String(encryptKey); var toEncryptArray = Convert.FromBase64String(bizContent); var rDel = new RijndaelManaged(); rDel.Key = keyArray; rDel.Mode = CipherMode.CBC; rDel.Padding = PaddingMode.PKCS7; rDel.IV = AES_IV; var cTransform = rDel.CreateDecryptor(rDel.Key, rDel.IV); var resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); if (string.IsNullOrEmpty(charset)) return Encoding.UTF8.GetString(resultArray); return Encoding.GetEncoding(charset).GetString(resultArray); } /// /// 初始化向量 /// /// /// private static byte[] initIv(int blockSize) { var iv = new byte[blockSize]; for (var i = 0; i < blockSize; i++) iv[i] = 0x0; return iv; } } }