问题描述
我多年来一直在 .NET 框架中使用 AES 进行 256 位加密。我最近在 .NET Core 5 中启动了一个新项目,并不断收到错误消息,指出此安装仅支持 128 位密钥。经过一番研究,.NET Core 现在似乎只支持 128 位密钥。
我的问题是我已经使用 256 位使用 AES 加密了大量数据。我可以使用 .NET Core 中的替代方案吗?不同的图书馆?一个不同的包,这样我就不必解密和重新加密我现有的所有数据?
//--------------------------------------------------------------------------
//Perform the encryption
//--------------------------------------------------------------------------
try
{
//Initialize the RijndaelManaged object
rmAES = new RijndaelManaged { BlockSize = 256,Key = key,IV = iv,Padding = PaddingMode.PKCS7 };
//Encrypt the data to the memory stream using the CryptoStream snd StreamWriter
ICryptoTransform rmEncryptor = rmAES.CreateEncryptor(key,iv);
rmMS = new MemoryStream();
using CryptoStream rmCStream = new CryptoStream(rmMS,rmEncryptor,CryptoStreamMode.Write);
using StreamWriter rmSWriter = new StreamWriter(rmCStream);
rmSWriter.Write(sourceString);
rmSWriter.Close();
}
catch (Exception ex)
{
throw new Exception(ex);
}
解决方法
您的问题不是密钥长度,而是块大小。这两件事是不同的。 .NET 5 应该支持 AES-256 的“正确”块大小为 128 位。 Rijnadael 的主要区别在于它支持不同的块大小(128、192 和 256 位)。来自wiki about AES:AES 是 Rijndael 分组密码的一个子集......(省略)......Rijndael 是具有不同密钥和块大小的一系列密码。 对于 AES,NIST 选择了 Rijndael 家族的三个成员,每个成员的块大小为 128 位,但三个不同的密钥长度:128、192 和 256 位。
关于你的问题,你可以从参考源的 github 中撕下 RijndaelManaged
类...... Rijndael 和 RijndaelManaged 和 RijndaelManagedTransform 应该是你的三个主要类'会需要。可能您将不得不“借用”一些其他实用方法。他们are all under the MIT license,所以这里没有问题。
至少,那是我会做的。