【发布时间】:2013-05-31 12:48:32
【问题描述】:
我开始使用 ECB,因为我听说它是最容易开始的,所以我创建了一个控制台应用程序,它接受输入进行加密,然后将其解密并输出加密文本和解密文本。这一切都很完美。我尝试使用 CBC 从头开始创建了一个新程序,但出现错误:“填充无效,无法删除。”从我所看到的我已经正确地完成了所有事情,任何人都可以指出我的问题可能是正确的方向吗?我已经尝试了我在博客和本网站上可以找到的所有内容,但均无济于事。异常发生在 DecryptData 方法中的 DecryptedText = srDecrypt.ReadToEnd() 行。
RijndaelManaged rijm = new RijndaelManaged();
//more variables here
protected void Page_Load(object sender, EventsArgs e)
{
//Convert Key from string to Byte Array Here
rijm.BlockSize = 128;
rijm.KeySize = 256;
rijm.Key = keyByteArray;
rijm.Mode = CipherMode.CBC;
rijm.Padding = PaddingMode.PKCS7;
ICryptoTransform crypt = rijm.CreateEncryptor(keyByteArray, null);
using(crypt)
{
byte[] value1Cipher = EncryptData(crypt, value1);
byte[] value2Cihper = EncryptData(crypt, value2);
encryptedValue1 = Convert.ToBase64String(vaue1Cipher);
encrpytedValue2 = Convert.ToBase64String(value1Cipher);
}
ICryptoTransform decrypt = rijm.CreateDecryptor(keyByteArray, null);
using (decrypt)
{
decryptedValue1 = DecryptData(decrypt, encryptedValue1); //string
decryptedValue2 = DecryptData(decrypt, encrpytedValue2); //string
}
//... Do something with the values here.
}
private byte[] EncryptData(ICryptoTransform encrypt, string text)
{
var stream = new MemoryStream();
using (var cryptoStream = new CryptoStream(stream, encrypt, CryptoStreamMode.Write))
{
using (var writer = new StreamWriter(cryptoStream))
{
writer.Write(text);
}
}
return stream.ToArray();
}
private string DecryptData(ICryptoTransform decrypt, string cipherText)
{
string decryptedText = null;
byte[] text = Convert.FromBase64String(cipherText);
using (MemoryStream msDecrypt = new MemoryStream(text))
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decrypt, CryptoStreamMode.Read))
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
decryptedText = srDecrypt.ReadToEnd();
return decryptedText;
}
【问题讨论】:
-
@JonWillemse 我已经尝试过了,但没有任何影响。
-
你在哪一行得到了异常?
-
@JohnWillemse 它出现在 DecryptData 方法中的 decryptedText = srDecrypt.ReadToEnd() 行。
-
我在以下几行中看到了一个错误:
decryptedValue1 = DecryptData(decryptor, ...,我认为decryptor应该改为decrypt,但不确定这是否只是拼写错误或相关。 -
@JohnWillemse 这只是我在清理要放在网站上的代码时犯的一个错误。感谢您捕捉到这一点,所以现在更清楚了。
标签: c# .net encryption aes