如何解密AES CBC?
How to decrypt AES CBC?
我使用 this link 来测试解密 AES CBC。
这是我的参数:
这项工作。然后我用C#实现。我的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;
namespace HHT.Module.eWallet.Helper
{
public class AESHelper
{
private AesCryptoServiceProvider _aes;
private ICryptoTransform _crypto;
public AESHelper(string key, string IV)
{
_aes = new AesCryptoServiceProvider();
_aes.BlockSize = 128;
_aes.KeySize = 256;
_aes.Key = ASCIIEncoding.ASCII.GetBytes(key);
if (!string.IsNullOrEmpty(IV)) {
_aes.IV = ASCIIEncoding.ASCII.GetBytes(IV);
}
_aes.Padding = PaddingMode.PKCS7;
_aes.Mode = CipherMode.CBC;
}
public string encrypt(string message)
{
_crypto = _aes.CreateEncryptor(_aes.Key, _aes.IV);
byte[] encrypted = _crypto.TransformFinalBlock(
ASCIIEncoding.ASCII.GetBytes(message), 0, ASCIIEncoding.ASCII.GetBytes(message).Length);
_crypto.Dispose();
return System.Convert.ToBase64String(encrypted);
}
public string decrypt(string message)
{
_crypto = _aes.CreateDecryptor(_aes.Key, _aes.IV);
byte[] decrypted = _crypto.TransformFinalBlock(
System.Convert.FromBase64String(message), 0, System.Convert.FromBase64String(message).Length);
_crypto.Dispose();
return ASCIIEncoding.ASCII.GetString(decrypted);
}
}
}
函数decrypt
不起作用,它return错误的字符串。我觉得有些参数和图片不一样
Base64编码的加密数据:
5qG6aB4UZ6bnbbPgFhnC+qp/FJ7ZuZ+fg1cYm+OUM1uP/6PyWfLg0w5bJstmBf2W
键:
745d88b1e8f75d320c2bd9198c08485d
您需要将 IV 初始化为全零,否则它会以随机值开头:
if (!string.IsNullOrEmpty(IV))
{
_aes.IV = ASCIIEncoding.ASCII.GetBytes(IV);
}
else
{
_aes.IV = new byte[_aes.BlockSize / 8];
}
此修复到位后,它会获得 same result 作为您使用的在线站点。
另请注意,您的问题说的是 ECB,但您的代码和屏幕截图使用的是 CBC(而且是 AES,而不是 ACS)。
我使用 this link 来测试解密 AES CBC。
这是我的参数:
这项工作。然后我用C#实现。我的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;
namespace HHT.Module.eWallet.Helper
{
public class AESHelper
{
private AesCryptoServiceProvider _aes;
private ICryptoTransform _crypto;
public AESHelper(string key, string IV)
{
_aes = new AesCryptoServiceProvider();
_aes.BlockSize = 128;
_aes.KeySize = 256;
_aes.Key = ASCIIEncoding.ASCII.GetBytes(key);
if (!string.IsNullOrEmpty(IV)) {
_aes.IV = ASCIIEncoding.ASCII.GetBytes(IV);
}
_aes.Padding = PaddingMode.PKCS7;
_aes.Mode = CipherMode.CBC;
}
public string encrypt(string message)
{
_crypto = _aes.CreateEncryptor(_aes.Key, _aes.IV);
byte[] encrypted = _crypto.TransformFinalBlock(
ASCIIEncoding.ASCII.GetBytes(message), 0, ASCIIEncoding.ASCII.GetBytes(message).Length);
_crypto.Dispose();
return System.Convert.ToBase64String(encrypted);
}
public string decrypt(string message)
{
_crypto = _aes.CreateDecryptor(_aes.Key, _aes.IV);
byte[] decrypted = _crypto.TransformFinalBlock(
System.Convert.FromBase64String(message), 0, System.Convert.FromBase64String(message).Length);
_crypto.Dispose();
return ASCIIEncoding.ASCII.GetString(decrypted);
}
}
}
函数decrypt
不起作用,它return错误的字符串。我觉得有些参数和图片不一样
Base64编码的加密数据:
5qG6aB4UZ6bnbbPgFhnC+qp/FJ7ZuZ+fg1cYm+OUM1uP/6PyWfLg0w5bJstmBf2W
键:
745d88b1e8f75d320c2bd9198c08485d
您需要将 IV 初始化为全零,否则它会以随机值开头:
if (!string.IsNullOrEmpty(IV))
{
_aes.IV = ASCIIEncoding.ASCII.GetBytes(IV);
}
else
{
_aes.IV = new byte[_aes.BlockSize / 8];
}
此修复到位后,它会获得 same result 作为您使用的在线站点。
另请注意,您的问题说的是 ECB,但您的代码和屏幕截图使用的是 CBC(而且是 AES,而不是 ACS)。