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

我正在研究邮件服务器的Web管理模块(如果你想看一下它是开源的。)</ p>

为此,我需要能够生成哈希值 密码可由 Dovecot 阅读。 正如在他们的维基上描述,他们推荐的密码哈希方案是SSHA256(额外的S用于盐渍) 。</ p>

还解释说,使用类似PHP代码的方法实现起来相当简单:</ p>

  $ salt ='generate_a_salt_somehow'  ; 
$ hash = hash('sha256',$ password。$ salt);
</ code> </ pre>

但是,从我读到的关于密码学的内容来看,这是一个 相当天真的方式来产生盐渍哈希,但如果你在在源代码中输入AES ,我认为在这种情况下也是如此。</ p>

因此,如果您对密码学有所了解,我很想知道最安全的方法,无论是mcrypt,mhash还是其他什么。</ p>
</ div>

展开原文

原文

I am working on a web administration module for mailservers (it's open source if you'd like to take a look).

For that, I need to be able to generate hashed password that is readable by Dovecot. As described on their wiki, their recommended password hashing scheme is SSHA256 (the extra S is for salted).

It's also explained that this could be reasonably simple to implement with something like this PHP code:

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

However, from what I've read about cryptography, that is a rather naíve way to generate salted hashes, but if you're doing it wrong when typing A-E-S in your source code, I figured the same could be true in this case.

So if you have insight into cryptography, I'd love to hear about the most secure way to do this, be it mcrypt, mhash or whatever.

douba6365
douba6365 1)如果它可用,我会使用bcrypt。2)接受的答案中显示的算法显然是不好的(太快),所以你不应该使用SSHA。
接近 6 年之前 回复
duanli0119
duanli0119 它必须匹配Dovecot的实现才有用,否则用户将无法登录:)
9 年多之前 回复
doujiyan0031
doujiyan0031 哈希是否必须与其他实现相匹配?或者每个站点的唯一性是否可以接受?
9 年多之前 回复
dowaw80220
dowaw80220 php.net/manual/en/function.hash-hmac.php
9 年多之前 回复
duanlun4411
duanlun4411 哦是的,并且首先准备哈希的安全方法也会很好:)
9 年多之前 回复

2个回答



您链接的Dovecot维基页面解释了Dovecot使用的确切哈希格式。 你在这个问题上没有任何选择--Dovecot对哈希的样子有所期待,所以你必须遵守它的规则:</ p>


For 大多数盐渍密码方案(SMD5,SSHA *)盐存储在密码哈希之后,其长度可以变化。 在对密码进行散列时,请在明文密码后附加盐,例如:SSHA256(pass,salt)= SHA256(pass + salt)+ salt。</ p>
</ blockquote>

所以 PHP中适当的密码生成功能可能如下所示:</ p>

  $ hash =“{SSHA256}”。  base64_encode(hash('sha256',$ password。$ salt)。$ salt); 
</ code> </ pre>
</ div>

展开原文

原文

The Dovecot wiki page you linked to explains what the exact hash format Dovecot uses is. You don't have any choice in the matter -- Dovecot has its expectations on what the hash will look like, so you have to play by its rules:

For most of the salted password schemes (SMD5, SSHA*) the salt is stored after the password hash and its length can vary. When hashing the password, append the salt after the plaintext password, e.g.: SSHA256(pass, salt) = SHA256(pass + salt) + salt.

So an appropriate password generation function in PHP might look like:

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

dsh8009271
dsh8009271 我一开始无法使用它,但事实证明,我需要将$ raw_output第三个参数设置为hash()为true才能使其正常工作,因为否则,它将对已经为hex的函数进行base64编码 编码号码。 否则,谢谢你的提示:)
9 年多之前 回复



PHP中的密码生成函数:</ p>

  $ hash =“{SSHA256}”  .base64_encode(hash('sha256',$ password。$ salt,true)。$ salt); 
</ code> </ pre>

必然是“true” - 第三个参数...... </ p>
</ div>

展开原文

原文

Password generation function in PHP:

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

Necessarily "true" - the third parameter...

douhuireng4407
douhuireng4407 我完全不知道为什么你的标记不是正确的答案。 这正是它的工作所需要的。
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐