首页 > 解决方案 > RijndaelManaged .NET Framework 和 .NET Core 的区别

问题描述

我在两个项目中使用完全相同的类来加密/解密字符串,一个项目针对 .NET Framework 4.8,第二个项目针对 .NET 5。我在使用 RijndaelManaged Algorithm 时遇到了非常奇怪的事情,在 .NET Framework 应用程序上它工作得非常好,但在 .NET 5 上它会抛出“Specified key is not a valid size for this algorithm”错误。

我遇到的第一个问题是为什么 .NET Framework 应用程序中不会发生错误(我知道 System.Security.Cryptography dll 的版本对于项目是不同的),我使用的密钥是 12 bytes 。正如我所研究的那样,RijndaelManaged 密钥在 .NET Framework 中仅接受 16/24/32 字节,在 .NET Core 中仅接受 16 字节,如此处的备注中所述 - https://docs.microsoft.com/en-us/dotnet/api /system.security.cryptography.rijndaelmanaged?view=net-5.0

this.key = Convert.FromBase64String(Convert.ToBase64String(Encoding.UTF8.GetBytes("qwertyuiopas")))

这就是我获取 key 字节数组的方式,它有 12 个字节长。

如何使这种加密在 .NET Core/5 应用程序中工作?

任何想法将不胜感激,在此先感谢!

注意:我无法更改 .NET Framework 应用程序中的任何内容,我正在处理 .Net 5 项目,我需要获取有效的加密字符串,然后将在 .NET Framework 应用程序中解密。

标签: c#asp.netencryptionrijndaelrijndaelmanaged

解决方案


如果您希望您的密钥具有固定的字节大小,请按此创建,然后将其转换为 base 64 以便于存储。

如果需要,您可以在单独的控制台应用程序中执行此操作。就像是:

var rng = new RNGCryptoServiceProvider();

var key = new byte[16];
rng.GetNonZeroBytes(key);

var base64Key = Convert.ToBase64String(key);

return base64Key;

推荐阅读