0

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

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

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

4

2 回答 2

3

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

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

也就是说,正如其他人指出的那样,如果您正在对密码进行哈希处理,您可能应该使用 bcrypt。这是一篇关于密码哈希方法的热门文章:

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

于 2012-07-02T10:52:01.070 回答
1

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

如果这是用于登录表单,一个好主意是使用 JavaScript bcrypt 库,并将哈希传输到服务器。这允许工作因素相当大,而不会使您的服务器超载或引入 DoS 漏洞。

于 2012-07-02T10:50:14.600 回答