我目前正在用 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/