如何为论坛注册加密用户密码?

3
什么是最安全的方式来加密phpBB或MyBB论坛注册用户密码?我不希望任何人能够访问用户密码,甚至包括管理MySQL数据库的人,如果有人成功黑客入侵数据库也不能查看密码。我只想让注册用户知道他们的密码。

3
这可能跑题了。但是,由于你似乎正在使用第三方应用程序来进行论坛交流,所以你可能会受困于它实施的任何加密方式(如果有)。通常,在数据库中存储密码时,不是加密而是使用单向哈希函数(如MD5或SHA)进行散列处理。加密密码需要您还要存储加密/解密密钥,这样就失去了加密的目的。 - mustaccio
2
永远不要存储密码。只需存储无法解密的哈希和盐值版本的数据库。当用户登录时,您需要对其输入的密码进行哈希和盐值处理,然后将结果与存储的哈希和盐值版本进行比较。 - Hannah Vernon
你不应该对密码+盐进行哈希处理吗? - Colin 't Hart
这其实是我想表达的意思,@Colin'tHart - 我想这就是在手机上打字的危险吧。 - Hannah Vernon
或许只是我过于苛求细节。 - Colin 't Hart
2个回答

6
我完全同意Federico Razzoli的回答,除了一点。确实,哈希必须在上游执行,无论如何不能在数据库级别执行(因此您的问题可能不相关)。
但是,仅使用哈希函数在安全方面是不足够的。您仍然容易受到字典攻击、彩虹表攻击和一些频率分析攻击的攻击。至少使用密码盐是至关重要的。
然而,最好使用专为存储密码设计的密钥派生函数。我建议您查看PBKDF2(使用PHP的hash_pbkdf2),bcrypt(使用PHP的password_hash,默认情况下使用明智的算法,目前是bcrypt)或scrypt。最后,您的问题表明您使用phpBB,这个论坛引擎通常应该自己处理安全存储密码。

1
我建议使用password_hash而不是hash_pbkdf2 - Calimo
@Calimo:默认情况下,password_hash使用bcrypt,因此它确实是一个不错的选择。今天,大多数人认为bcrypt实际上比PBKDF2更好(尽管两者都很好)。我会添加一个链接。对于那些好奇的人来说,即使它相当新,也可以看一下密码哈希竞赛的获胜者:Argon2(用于基于密码的密钥派生的Argon2i版本)。 - mlpo
password_hash/password_verify 的好处在于,当 PHP 决定使用更好/更安全的算法时,过渡将是完全透明的,无需重新编码,也不会留下(或几乎没有)不安全的代码。 - Calimo
@Calimo 是的,这是一个很好的观点,我在答案中加了一条备注。 - mlpo

1
你可以使用SHA512。
我看到你使用了"mysql"标签。请不要使用SHA2() SQL函数或任何其他SQL哈希函数。如果这样做,明文字符串将通过网络发送,并可能被写入某些日志。
相反,请使用PHP的hash()函数,并将'sha256'指定为第一个参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接