如何解决如何使用AES对称加密和解密C#中的一些数据?
我正在尝试使用 AES 加密和解密一些数据。但我只得到乱码的输出。我做错了什么?
static void test()
{
byte[] myFileBytes; // Will contain encrypted data. First the IV,then the ciphertext.
var myPassword = "helloworld";
var dataToEncrypt = "this is a test";
// STEP 1: Encrypt some data:
byte[] key;
using (var sha256 = SHA256.Create())
key = sha256.ComputeHash(Encoding.UTF8.GetBytes(myPassword));
using (var myFileStream = new MemoryStream())
using (var aes = System.Security.Cryptography.Aes.Create())
{
aes.Key = key;
myFileStream.Write(aes.IV); // Use the default created by AES,which is presumably non-pseudo random
using (var cryptoStream = new CryptoStream(myFileStream,aes.CreateEncryptor(),CryptoStreamMode.Write))
{
cryptoStream.Write(Encoding.UTF8.GetBytes(dataToEncrypt));
cryptoStream.Flush();
myFileBytes = myFileStream.ToArray(); // We are done!
} // disposing CryptoStream disposes the underlying MemoryStream
}
// STEP 2: Decrypt it to verify that it works
using (var aes = System.Security.Cryptography.Aes.Create())
{
using (var myFileStream = new MemoryStream(myFileBytes))
{
var iv = new byte[aes.IV.Length];
myFileStream.Read(iv,iv.Length);
using (var cryptoStream = new CryptoStream(myFileStream,aes.CreateEncryptor(key,iv),CryptoStreamMode.Read))
using (var copyStream = new MemoryStream())
{
cryptoStream.copyTo(copyStream);
var decrypted = Encoding.UTF8.GetString(copyStream.ToArray());
Debug.Assert(dataToEncrypt == decrypted); // Fails!
}
}
}
}
解决方法
我会看一下 example in the documentation 并与您的代码进行比较。
特别是在解密时您使用的是 aes.CreateEncryptor(key,iv)
。应该是 aes.CreateDecryptor(key,iv)
。
文档中的示例在调用 CreateEncryptor
时也输入了键和 IV,但我不确定是否需要这样做。
您可能不应该使用 sha256 从密码生成密钥。正确的方法是 key derivation algorithm。例如Rfc2898DeriveBytes
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。