如何为网站加密用户登录密码


How to go about encrypting user login passwords for a website

我正在为一家公司开发一个网站,他们需要登录验证才能使用该公司提供的一些服务。根据常识,我知道在将用户密码保存到数据库时需要对其进行加密。这不是问题,我可以简单地实现一个哈希算法并存储哈希(或者其他什么,我仍然需要搜索StackOverflow来找出保存这些信息的最佳方法,但这不是我想要的)。

我好奇的是如何实际执行加密算法。这是服务器上的一个独立程序,它将加密密码并存储它吗?或者我必须使用PHP模块来加密密码?或者是我没有想到的其他事情?

任何和所有的答案都是感激的,如果我说得不好,我指望你叫我出来;)

PHP内置的哈希方法工作得很好。不需要调用第三方库。您应该看一下hash()函数。记得在保存哈希时使用浓盐。网上应该有很多关于这方面的好文章,这里也有。

正如drdrknlsn在评论中指出的,md5和sha1是糟糕的选择,因为它们被认为是坏的。

此外,正如Grexis在他的回答中指出的那样,PBKDF2也是一种你可以研究的方法。

我知道这个问题已经有了答案,但这里是我使用的一个散列函数。这是一个PHP PBKDF2实现(在RFC 2898中描述):

public static function hash($p, $s, $c = 5000, $kl = null, $a = 'sha256'){
    $hl = strlen(hash($a, null, true));
    if(is_null($kl)) $kl = $hl;
    $kb = ceil($kl/$hl);
    $dk = '';
    for($block = 1; $block <= $kb; $block++){
        $ib = $b = hash_hmac($a, $s.pack('N', $block), $p, true);
        for($i = 0; $i < $c; $i++)
            $ib ^= ($b = hash_hmac($a, $b, $p, true));
        $dk .= $ib;
    }
    return substr($dk, 0, $kl);
}

更多信息在这里:用PHP加密密码(上面的函数只从这个位置稍微修改了一下,以提供默认值)