RijndaelManaged 密钥长度是否与 AES[密钥长度] 相同

本文关键字:密钥长度 相同 是否 RijndaelManaged AES | 更新日期: 2023-09-27 18:37:13

RijndaelManage是一种算法,而AES是标准算法。 当提到 AES256 时,这是否意味着我与 RijndaelManaged 一起使用的密钥长度必须是 256 个字符?

如果我有这样的密钥:

key = "mytestkey";

只有 9 个字符,这是否意味着我使用的是 AES9?

RijndaelManaged 密钥长度是否与 AES[密钥长度] 相同

Aes/Rijndael 键的大小以位为单位,而不是字符;AES256 使用 256 位密钥。您必须为其提供一个正好是 256 位的密钥。AES 标准和 Rijndael 仅接受 128、192 或 256 位的密钥大小。

您不应该互换AES和Rijndael。AES标准源自Rijndael,但它们并不完全相同。如果您希望使用 AES,请使用 AES 进行所有操作;如果您希望使用Rijndael,请使用Rijndael进行所有操作。

"mytestkey"不能直接成为AES256的密钥,也不能成为类似的Rijndael模式;它不是256位长。为了将其用作密钥,您必须将其转换为 256 位长的字节块。

如果您正在使用密码,一种典型的方法是使用密钥拉伸,使用哈希算法,如PBKDF2或Scrypt。 PBKDF代表"基于密码的密钥派生功能",这基本上正是您正在做的事情 - 从密码派生密钥。

从理论上讲,您也可以使用 SHA256(始终具有 256 位输出)对密码进行哈希处理,并将该 256 位块用作 AES 的密钥;从安全角度来看,这样做是不明智的,因为预先计算密码的 SHA 哈希相对容易。

请记住,如果您使用熵很少的密码,那么您的加密安全性就会受到影响 - 有人猜测密钥所需的时间可能很短。 "mytestkey"最多有 ~42 位熵 - 您只使用小写字母,因此每个位置 26 个值,并且有 9 位(9 个字符)。因此,理论上存储此内容所需的位数log_2( 26^9 ) = 42.3。在这种情况下,您将使用 AES256 和一个只有 ~42 位熵的密钥。

我应该指出,从安全角度来看,这里给出的建议是对如何将密码转换为密钥的不完整处理。如果您想更好地了解如何从密码正确生成密钥,我建议您从一些阅读开始,例如 owasp.org 的密码存储备忘单。