计算MCrypt IV和Hash的最大长度


Calculate Maximum Length of MCrypt IV and Hash?

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

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

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

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

免责声明:我特意省略了加密,但将感谢任何关于不同密码块初始值长度和哈希长度的文档。(不确定术语,希望有意义。)

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

当然,盐值也需要存储。

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

因此,您的密码可以任意长或短,salt每字节占用一个字节(编码)。

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