c# - C# 中的 Rijndael key 大小

标签 c# encryption rijndael symmetric-key

我目前正在用 C# 开发一个小工具,可以让我快速加密我的文件。所以我用了 this script这看起来对我来说很完美。但我仍然有一个问题: key 太短(最多 8 个字符)。我在 RijndaelManaged() 文档中读到 key 的最大大小为 256 位,因此我应该能够使用 64 个字符的 key ...(如 sha256 哈希)

但每次我尝试增加 key 大小时,我都会得到一个漂亮的“加密失败!”,即使是 9 个字符。我一直在谷歌上寻找解决方案,但没有任何用处。

我发现的最好的东西 is this .所以我尝试像这样更改填充:

RMCrypto.Padding = PaddingMode.ISO10126;

// or
RMCrypto.Padding = PaddingMode.ANSIX923;

但它并没有改变任何东西......

最佳答案

Rjindael 的 key 大小不能自由选择。它必须是 128 位、192 位或 256 位。它不能是 9 个字节或 18 个字节或 36 个字节。它必须严格为 16 字节、24 字节或 32 字节。

此外,您应该首先适本地指定 key 大小,才能正确使用该类。虽然 128 位和 192 位 key 大小都被允许,但是您不能,例如,指定 key 大小为 128 位但使用 192 位 key 。您指定的 key 大小必须与您使用的 key 大小相匹配。

这是您如何操作的示例:

您可以在 RjindaelManaged.KeySize 属性中指定您的 key 大小(不要与 BlockSize 混淆):

RMCrypto.KeySize = 256;

然后 byte[] 中的键大小应该与上面键的大小匹配:

byte[] key = new byte[]{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }; 
RMCrypto.Key = key;

为了获得一定的安全性,请务必使用看起来像随机噪声的 key 。

目前您的 key 太短:

string password = @"myKey123";
byte[] key = UE.GetBytes(password);

关于c# - C# 中的 Rijndael key 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36826445/

相关文章:

c# - AvalonDock 绑定(bind)在 DocumentHeaderTemplate 中不起作用

C# 彩票比较结果

c# - Visual Studio 运行不需要的代码

java - AES:如何为每个算法大小从密码生成 key

iPhone:支持的加密/解密算法

c# - C# 中的“向后”公钥/私钥加密,我该怎么做?

PHP加密&VB.net解密

c# - AutoMapper - 为什么要覆盖整个对象?

c# - 正确的 C# Rijndael IV 用法/存储

asp.net - 经典asp和ASP.NET之间的密码加密/解密