计算MCrypt IV和Hash的最大长度?

时间:2014-04-18 06:14:03

标签: php hash cryptography mcrypt rijndael

我一直在研究创建一些不同的哈希等。我知道password_hash()函数,但我目前正在使用mcrypt创建初始化值。出现的问题是,如果密码大于8个字符,则会剪切一些散列密码。

我当前的代码将一个salt(由mcrypt_create_iv()创建)添加到用户密码中。然后使用hash()函数对其进行加密。 密码的标准是8到40个字符。

使用latin1_swedish_ci排序规则,MySQL中的列看起来像varchar(64)。

如何计算初始化值可能的最大长度(MySQL长度),以及用户输入密码的最大长度?

免责声明:我故意省略了加密,但会欣赏任何有关不同密码块初始值长度以及散列长度的文档。 (不确定术语,希望有道理。)

1 个答案:

答案 0 :(得分:1)

散列函数以及password_hash() - 使用HMAC或加密MAC实现不同的基于密码的密钥派生函数(PBKDF) - 始终为任何输入值返回相同数量的数据。如果密码被截断,那么这是因为在调用任何这些函数之前发生的代码。通常,如果使用SHA-1,这些函数将返回20个字节。

当然还需要存储盐值。

如果使用十六进制存储它,那么与二进制值相比,您需要两倍的字符数。如果使用base 64编码,则如果包含填充,则需要((size + 2) / 3 * 4)个字符。

因此,您的密码可以是所需的长或短,盐每字节需要一个字节(编码)。

强烈建议您还存储某种使用功能的指示器。这可能是指示您当前协议的单个字节。这样,一旦用户返回填写他的(新)密码,您就可以为每个条目升级密码协议。