9

我正在为邮件服务器开发一个 Web 管理模块(如果你想看看它是开源的)。

为此,我需要能够生成Dovecot可读的散列密码。如他们的 wiki 所述,他们推荐的密码散列方案是 SSHA256(额外的 S 用于盐渍)。

还解释说,使用以下 PHP 代码实现这可能相当简单:

$salt = 'generate_a_salt_somehow';
$hash = hash('sha256', $password . $salt);

然而,从我读过的关于密码学的内容来看,这是一种相当幼稚的生成加盐散列的方法,但如果你在源代码中输入 AES时做错了,我认为在这种情况下也是如此。

因此,如果您对密码学有深入了解,我很想听听最安全的方法,无论是 mcrypt、mhash 还是其他任何方法。

4

2 回答 2

15

PHP中的密码生成功能:

$hash = "{SSHA256}".base64_encode(hash('sha256', $password.$salt, true).$salt);

必然是“真”——第三个参数……

于 2015-03-29T21:47:33.007 回答
10

您链接到的 Dovecot wiki 页面解释了 Dovecot 使用的确切哈希格式是什么。在这件事上你别无选择——Dovecot 对哈希的样子有自己的期望,所以你必须遵守它的规则:

对于大多数加盐密码方案(SMD5、SSHA*),salt 存储在密码哈希之后,其长度可能会有所不同。对密码进行哈希处理时,在明文密码后附加盐,例如:SSHA256(pass, salt) = SHA256(pass + salt) + salt。

因此,PHP 中适当的密码生成函数可能如下所示:

$hash = "{SSHA256}" . base64_encode(hash('sha256', $password . $salt) . $salt);
于 2011-07-15T21:58:30.527 回答