C# 中的 Rijndael 密钥大小

5 c# encryption symmetric-key rijndael

我目前正在用 C# 开发一个小工具,它允许我快速加密我的文件。所以我使用了这个看起来很适合我的脚本。但我仍然有一个问题:密钥太短(最多 8 个字符)。我在 RijndaelManaged() 文档中读到密钥的最大大小为 256 位,所以我应该能够使用 64 个字符的密钥......(如 sha256 哈希)

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

我发现的最好的事情是这个。所以我试图改变填充,如:

RMCrypto.Padding = PaddingMode.ISO10126;

// or
RMCrypto.Padding = PaddingMode.ANSIX923;
Run Code Online (Sandbox Code Playgroud)

但这并没有改变什么......

Max*_*rdt 1

填充是将明文填充到块长度的大小,与密钥大小无关。

在 Rijndael 中,您只能使用长度为 128、160、192、224 或 256 位的密钥。(AES-128 --> 128 位密钥,AES-256 --> 256 位密钥。两者的块长度仍然是 128)。

您无法轻易更改密码的密钥长度。通常,您无论如何都会使用密钥派生函数(即使用哈希函数)从密码字符串中获取 128 位(或您需要的任何大小)密钥。

简而言之,您误解了您尝试使用的密码的填充和密钥长度。如果您想要任意长度的密码字符串,请使用密钥派生函数。您发布的第一个链接中的代码使用例如该类Rfc2898DeriveBytes

要设置密钥长度,请首先更改属性.KeySize,然后设置密钥。

RijndaelManaged rijndaelCSP = new RijndaelManaged();
rijndaelCSP.KeySize = 256;
//derive key from password and set as .Key.
Run Code Online (Sandbox Code Playgroud)

MSDN 文档