你如何添加,“舍入”到像hash_hmac()这样的函数?

时间:2012-03-28 17:35:55

标签: php hash sha512

我已经阅读了这篇文章http://codahale.com/how-to-safely-store-a-password/,并且说使用盐甚至不能安全地抵御GPU暴力攻击。我不想被黑客攻击并在几周内解密密码...所以我读了更多,解决方案是bcrypt但是我不想实现phpass class,我喜欢SHA-512。

但是,如果可以向sha-512添加回合以减缓GPU攻击......怎么办呢?轮次是指迭代吗?

如何添加轮次以减缓sha512?

2 个答案:

答案 0 :(得分:0)

增加SHA512的轮次并不意味着使用相同的哈希函数迭代已经哈希的值。这实际上可以降低给定的安全性,因为在第一次散列之后,您的新“密码”具有减少的字符集。请参阅security.stackexchange上的此链接,该链接部分解释了原因。

我建议不要'滚动你自己的'密码保护功能。而是使用经过更好研究和审查的解决方案,例如PHPass

在他们的网站上也是一篇写得非常好的文章,解释了password hashing and creation的安全隐患。

答案 1 :(得分:0)

我发现存储密码的最安全方法之一是:

<?php    
function createPasswordSalt($saltLength = 20) {
    return substr(md5(uniqid(rand(), true)), 0, $saltLength);
}

function createPasswordHash($password, $salt = null, $staticKey = null) {
    if ($staticKey === null) {
        $staticKey = "Some passphrase that will be only in your php script";
    }

    if ($salt === null) {
        $salt = self::createPasswordSalt(); 
    }       

    return hash_hmac('sha512', $password . $salt, $staticKey);

}

我存储在数据库密码和哈希......

所以这里我使用了多层安全性。如果他将数据库和php脚本放在一起,那么只能破解你的密码。在任何情况下,如果黑客拥有您的脚本,他可以破解您在数据库中拥有的任何密码,因为他知道您用于散列密码的方案。