1

我正在编写一个 PHP 脚本来验证用户身份。我想使用 SHA512 作为哈希值并使用盐来添加密码。要生成盐,我想使用 mcrypt_create_iv。但首先,我必须弄清楚初始化向量的大小。为此,我看到 php 有:mcrypt_get_iv_size。但我有一个问题,请:

对于 mcrypt_get_iv_size() 密码字符串和模式字符串我使用什么?请记住,我使用的是 SHA512,因此只要 sha512 哈希值,盐就需要至少。为了进行实验,我尝试了“ mcrypt_get_iv_size(CRYPT_SHA512, MCRYPT_MODE_CFB) ”,但 php 抱怨了。

4

2 回答 2

1

实际上mcrypt_create_iv()是为了生成一个随机的二进制字符串,可以用来加密的。你想要做的是散列而不是加密,所以mcrypt_get_iv_size()在这里没有意义。

从 PHP 5.3 开始,它可以安全地用于mcrypt_create_iv()生成随机字符串,但请记住,您会得到一个二进制输出,它不适合散列函数的字母表。

你可以看看这个例子,它展示了如何使用mcrypt_create_iv()生成盐。不过,要散列密码,您不应该使用 sha512,而是使用像BCrypt这样的密钥派生函数,这很慢。

于 2012-10-20T19:51:00.970 回答
0

盐的长度与任何密码的 IV 大小无关。相反,您需要弄清楚您的特定哈希算法需要多少字节的随机数据,同时考虑到盐格式。例如,bcrypt 需要 16 个字节,并采用 base64-esque 编码。

无论如何,您需要问这个问题的事实意味着您不知道自己在做什么,这对于密码哈希来说是一个非常糟糕的迹象。请为此目的使用现有库之一。

于 2012-10-20T19:47:34.920 回答