Php 如何向hash_hmac()这样的函数添加“轮数”?

Php 如何向hash_hmac()这样的函数添加“轮数”?,php,hash,sha512,Php,Hash,Sha512,我从这篇文章中读到,它说使用salt对GPU暴力攻击甚至是不安全的。我不想在几周内被黑客破解密码。。。所以我读了更多,解决方案是bcrypt,但是我不想实现phpass类,我喜欢SHA-512 然而,如果你能在sha-512上增加回合数来减缓GPU攻击。。。如何做到这一点?轮次是否意味着迭代 如何添加轮数以降低sha512的速度?增加sha512的轮数并不意味着使用相同的哈希函数迭代已哈希的值。这实际上会降低给定的安全性,因为在第一次散列之后,新“密码”的字符集会减少。请参阅此链接,其中部分解释

我从这篇文章中读到,它说使用salt对GPU暴力攻击甚至是不安全的。我不想在几周内被黑客破解密码。。。所以我读了更多,解决方案是bcrypt,但是我不想实现phpass类,我喜欢SHA-512

然而,如果你能在sha-512上增加回合数来减缓GPU攻击。。。如何做到这一点?轮次是否意味着迭代


如何添加轮数以降低sha512的速度?

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

我建议不要“滚动您自己的”密码保护功能。取而代之的是使用一种经过更充分研究和审查的解决方案,例如


在他们的网站上还有一篇非常好的文章,深入地解释了安全性的含义

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

<?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脚本放在一起,才能破解你的密码。无论如何,如果黑客拥有你的脚本,他可以破解你数据库中的任何密码,因为他知道你用于哈希密码的方案。

你真的认为SHA512本身对你的应用程序不够安全吗?@webarto如果数据库被盗,他们可能会用高端GPU/CUDA破解SHA-512?所以。。。你已经确定bcrypt是一个更好的解决方案,但你不愿意使用它,因为你喜欢SHA-512,现在你想让SHA-512像bcrypt一样工作吗?@AlexHowansky是的,我不理解回合的定义。如果我有独特的salt,我想对SHA-512应用这种战术。我想放慢算法的速度。呵呵,那应该是修辞。你的逻辑就像说,我知道法拉利比我的自行车快,但我喜欢我的自行车,所以请帮我弄清楚如何使它以200英里/小时的速度行驶。