我试图使用.NET中的RijndaelManaged类加密一个文本字符串,但是我总是得到一个CryptographicException (“要解密的数据的长度是无效的”)。这条消息没有多大用处,尤其是当我尝试加密数据而不是解密数据时,它就会发生。下面是代码。
public static string EncryptKMSToken(string valueToEncrypt, string encryptionKey)
{
string results = string.Empty;
using (RijndaelManaged aes = new RijndaelManaged())
{
aes.BlockSize = 128;
aes.KeySize = 128;
aes.Padding = PaddingMode.PKCS7;
aes.Mode = CipherMode.CBC;
UTF8Encoding byteTransform = new UTF8Encoding();
aes.Key = byteTransform.GetBytes(encryptionKey);
ICryptoTransform encryptor = aes.CreateDecryptor(aes.Key, aes.IV);
using (MemoryStream stream = new MemoryStream())
{
using (CryptoStream encryptStream = new CryptoStream(stream, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter writer = new StreamWriter(encryptStream))
{
writer.Write(valueToEncrypt);
}
byte[] encryptedBytes = stream.ToArray();
results = byteTransform.GetString(encryptedBytes);
}
}
}
return results;
}错误发生在第三个using语句结束时(即writer.Write(valueToEncrypt)之后的行)。如果我试图将这两行移动到第三个using块中的下面两行,我最终得到一个空字符串(错误仍然发生)。我直接从这个站点(http://stackoverflow.com/questions/273452/using-aes-encryption-in-c-sharp)获取了这段代码,但它似乎不起作用。有谁有什么想法吗?
发布于 2012-10-23 04:19:58
是的,但是如果你重读你的代码,我想你也会这样做的:
ICryptoTransform encryptor = aes.CreateDecryptor(aes.Key, aes.IV);这是一个被命名为加密器的解密器。
https://stackoverflow.com/questions/13019127
复制相似问题