Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中安全地生成SSHA256或SSHA512哈希?_Php_Hash_Cryptography_Ssha - Fatal编程技术网

如何在PHP中安全地生成SSHA256或SSHA512哈希?

如何在PHP中安全地生成SSHA256或SSHA512哈希?,php,hash,cryptography,ssha,Php,Hash,Cryptography,Ssha,我正在开发一个(如果你想看的话,它是开源的) 为此,我需要能够生成可由用户读取的哈希密码。如前所述,他们推荐的密码哈希方案是SSHA256(额外的S用于salted) 还解释了,这可能很容易用以下PHP代码实现: $salt = 'generate_a_salt_somehow'; $hash = hash('sha256', $password . $salt); 然而,从我读到的关于密码学的内容来看,这是一种相当幼稚的生成salt散列的方法,但是如果你在做错事的时候,我认为在这种情况下也是

我正在开发一个(如果你想看的话,它是开源的)

为此,我需要能够生成可由用户读取的哈希密码。如前所述,他们推荐的密码哈希方案是SSHA256(额外的S用于salted)

还解释了,这可能很容易用以下PHP代码实现:

$salt = 'generate_a_salt_somehow';
$hash = hash('sha256', $password . $salt);
然而,从我读到的关于密码学的内容来看,这是一种相当幼稚的生成salt散列的方法,但是如果你在做错事的时候,我认为在这种情况下也是如此


因此,如果你对密码学有深入的了解,我想听听最安全的方法,不管是mcrypt、mhash还是其他什么。你链接到的Dovecot wiki页面解释了Dovecot使用的确切哈希格式。在这件事上你没有任何选择——Dovecot对散列的样子有自己的期望,所以你必须遵守它的规则:

对于大多数salt密码方案(SMD5,SSHA*),salt存储在密码散列之后,其长度可以变化。散列密码时,在明文密码后追加salt,例如:SSHA256(pass,salt)=SHA256(pass+salt)+salt

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

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

PHP中的密码生成函数:

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

必须是“true”-第三个参数…

哦,是的,一种让prepare hash先行的安全方法也很好:)hash必须与其他实现匹配吗?或者每个站点的唯一性可以接受吗?它必须匹配Dovecot的实现才能有用,否则用户将无法登录:)1)如果它可用,我将使用bcrypt。2) 在接受的答案中显示的算法显然不好(太快),因此不应该使用SSHA。起初我无法让它工作,但事实证明,我需要将
$raw\u output
第三个参数to hash()设置为true,以使其工作,因为否则,它将对已经十六进制编码的数字进行base64编码。否则,谢谢你的提示:)我完全不知道为什么你的答案没有标记为正确答案。这正是这项工作所需要的;如果你不想要盐,就把它去掉——它仍然有效。我正在进行自动电子邮件创建,这是必要的部分。