如果我在PHP中进行以下调用,它将使用我的密码和salt使用sha512多次哈希:
echo crypt('password', '$6$rounds=1000$salt');
然而,我想知道这个过程是如何运作的。是这样的吗?:
$hash = hash('sha512', 'password' . 'salt');
for ($i = 1; $i < 1000; $i++) {
$hash = hash('sha512', $hash);
}
echo base64_encode($hash);
或者这是一个非常复杂的过程吗?
我问的原因是因为我想要一个易于用其他语言实现的加密哈希系统。
答案 0 :(得分:3)
您可以在此处查看实际的crypt()源代码:
https://github.com/php/php-src/blob/master/ext/standard/crypt.c
如上所述,正如其他人指出的那样,如果您正在使用密码,则应该使用bcrypt。这是一篇关于密码散列方法的热门帖子:
答案 1 :(得分:1)
如果您正在寻找一种强大的密码哈希算法来实现不同语言,请使用bcrypt。有Java,C#,JavaScript,PHP,obj-C,Python,Perl等的库。
如果这是登录表单,最好使用JavaScript bcrypt lib,并将哈希值传输到服务器。这样可以使工作因素相当大,而不会使服务器过载或引入DoS漏洞。