diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/AESUtility.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/AESUtility.cs
index 40239248..07d0a63f 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/AESUtility.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/AESUtility.cs
@@ -11,13 +11,13 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Utilities
public static class AESUtility
{
///
- /// 解密数据。
+ /// 基于 CBC 模式解密数据。
///
/// AES 密钥字节数组。
/// 加密使用的初始化向量字节数组。
/// 待解密数据字节数组。
/// 解密后的数据字节数组。
- public static byte[] Decrypt(byte[] keyBytes, byte[] ivBytes, byte[] cipherBytes)
+ public static byte[] DecryptWithCBC(byte[] keyBytes, byte[] ivBytes, byte[] cipherBytes)
{
if (keyBytes == null) throw new ArgumentNullException(nameof(keyBytes));
if (ivBytes == null) throw new ArgumentNullException(nameof(ivBytes));
@@ -25,32 +25,29 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Utilities
using (SymmetricAlgorithm aes = Aes.Create())
{
+ aes.Mode = CipherMode.CBC;
+ aes.Padding = PaddingMode.PKCS7;
aes.Key = keyBytes;
aes.IV = ivBytes;
- using (Stream ms = new MemoryStream(cipherBytes))
- using (Stream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read))
- {
- byte[] plainBytes = new byte[cipherBytes.Length];
- cs.Read(plainBytes, 0, plainBytes.Length);
- return plainBytes;
- }
+ using ICryptoTransform transform = aes.CreateDecryptor();
+ return transform.TransformFinalBlock(cipherBytes, 0, cipherBytes.Length);
}
}
///
- /// 解密数据。
+ /// 基于 CBC 模式解密数据。
///
/// 经 Base64 编码后的 AES 密钥。
/// 经 Base64 编码后的 AES 初始化向量。
/// 经 Base64 编码后的待解密数据。
/// 解密后的文本数据。
- public static string Decrypt(string encodingKey, string encodingIV, string encodingCipherText)
+ public static string DecryptWithCBC(string encodingKey, string encodingIV, string encodingCipherText)
{
if (encodingKey == null) throw new ArgumentNullException(nameof(encodingKey));
if (encodingCipherText == null) throw new ArgumentNullException(nameof(encodingCipherText));
- byte[] plainBytes = Decrypt(
+ byte[] plainBytes = DecryptWithCBC(
keyBytes: Convert.FromBase64String(encodingKey),
ivBytes: Convert.FromBase64String(encodingIV),
cipherBytes: Convert.FromBase64String(encodingCipherText)