C# 使用RijndaelManaged时出现加密异常
我正在尝试使用.NET中的RijndaelManaged类加密文本字符串。然而,我不断得到一个加密异常(“要解密的数据长度无效”)。这个消息并没有什么帮助,尤其是当我试图加密数据而不是解密数据时。下面是代码C# 使用RijndaelManaged时出现加密异常,c#,encryption,aes,C#,Encryption,Aes,我正在尝试使用.NET中的RijndaelManaged类加密文本字符串。然而,我不断得到一个加密异常(“要解密的数据长度无效”)。这个消息并没有什么帮助,尤其是当我试图加密数据而不是解密数据时。下面是代码 public static string EncryptKMSToken(string valueToEncrypt, string encryptionKey) { string results = string.Empty; using (RijndaelManaged aes
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)但它似乎不起作用。有人有什么想法吗?是的,但我认为如果您重新阅读代码,您也会有想法:
ICryptoTransform encryptor = aes.CreateDecryptor(aes.Key, aes.IV);
这是一个名为encryptor的解密程序…heh,它起作用了。我知道它必须很小。我想我只需要另一双眼睛。谢谢!将UTF-8字符串直接转换为密钥很可能是个坏主意。你应该使用十六进制或base64密钥。或者如果真的有必要,使用密码和一个缓慢的散列,如PBKDF2。