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

时间:2016-03-03 22:32:11

标签: c# .net encryption aes rijndaelmanaged

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

如果我有这样的钥匙:

key = "mytestkey";

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

1 个答案:

答案 0 :(得分:3)

Aes / Rijndael密钥大小以位为单位,而不是字符; AES256使用256位密钥。你必须给它一个正好是256位的密钥。 AES标准和Rijndael只接受128,192或256位的密钥大小。

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

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

如果您正在使用密码,使用key stretchingPBKDF2等哈希算法的一种典型方法是使用Scrypt。 PBKDF代表“基于密码的密钥派生功能”,这基本上就是你正在做的事情 - 从密码中获取密钥。

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

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

我应该注意,从安全角度来看,这里给出的建议是对如何将密码转换为密钥的不完整处理。如果您想更好地了解如何从密码中正确生成密钥,我建议您先阅读一些内容,例如owasp.org上的Password Storage Cheat Sheet