PHP的crypt函数如何在内部工作?

时间:2012-07-02 10:48:06

标签: php hash crypt

如果我在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);

或者这是一个非常复杂的过程吗?

我问的原因是因为我想要一个易于用其他语言实现的加密哈希系统。

2 个答案:

答案 0 :(得分:3)

您可以在此处查看实际的crypt()源代码:

https://github.com/php/php-src/blob/master/ext/standard/crypt.c

如上所述,正如其他人指出的那样,如果您正在使用密码,则应该使用bcrypt。这是一篇关于密码散列方法的热门帖子:

http://codahale.com/how-to-safely-store-a-password/

答案 1 :(得分:1)

如果您正在寻找一种强大的密码哈希算法来实现不同语言,请使用bcrypt。有Java,C#,JavaScript,PHP,obj-C,Python,Perl等的库。

如果这是登录表单,最好使用JavaScript bcrypt lib,并将哈希值传输到服务器。这样可以使工作因素相当大,而不会使服务器过载或引入DoS漏洞。