最佳加密技术

时间:2013-07-09 11:15:51

标签: php mysql passwords password-hash

我正在使用PHP。我想要一个安全快速的密码加密系统。散列密码一百万次可能更安全,但也更慢。如何在速度和安全性之间取得良好的平衡? 我想知道php中最好的加密方法以及如何应用它。

4 个答案:

答案 0 :(得分:11)

我建议使用新的PHP 5.5 password API。它提供了一种散列密码的安全方法,同时又足够快。

如果您没有PHP 5.5可用,则polyfill适用于PHP 5.3.7 +:https://github.com/ircmaxell/password_compat

答案 1 :(得分:6)

使用PHPass,它是一个优秀的哈希框架,非常易于使用!

答案 2 :(得分:3)

使用SHA512 http://php.net/manual/en/function.hash.php。 SHA512没有破解。我建议使用salt:在散列之前附加到密码的随机字符串。如果攻击者获得对包含密码和盐的数据库的访问权,这可以防止预先计算的彩虹表,但不能防止字典攻击。 SHA512(密码+盐) - >哈希 将哈希和盐存储在数据库中 检查密码时,检索用户对应的salt,将其与密码连接,哈希并将其与存储的哈希进行比较。 请在此处阅读:How long to brute force a salted SHA-512 hash? (salt provided)

回顾你的问题,特别是关于你的陈述“一百万次密码密码可能更安全,但也更慢。如何在速度和安全之间取得良好的平衡”。实际上,反复散列可以保护您免受字典攻击,因为计算字典中的所有哈希值计算成本过高。我不是在教你什么。从我给你的第一个链接开始,计算一个相对较长的SHA512哈希需要大约46毫秒。当你处于军备竞赛环境中时,我可以想到以下可能影响你决定的因素: - 提高计算能力(更多CPU核心和GPU计算) - 随着时间的推移改进算法 - 攻击者可用的金额 - 破解后离开您网站的价值(如果低,则不值得付出努力) 反对 - 您拥有的CPU功率 根据经验,我会尽可能多地哈希,以免影响我的网站性能。考虑到每秒登录次数,您可以大致计算出您可以承受的CPU功率,而不会影响您的站点性能。

最后一条评论:假设黑客已经可以访问包含用户名和散列密码的表,那么您可能会更担心他们可以在您的网站上执行的所有不良操作。

答案 3 :(得分:2)

你不是在寻找加密 - 你正在寻找哈希。

我建议使用openwalls phpass http://www.openwall.com/phpass/

如果您使用的是PHP5.5,则他们有一个密码包含API http://uk3.php.net/password

了解更多信息。

MD5(无盐)已经使用了一段时间,周围有大量的查找列表,结合现代硬件每秒获得700K +密码,它不会花费很长时间来反转"密码。

用盐可以更安全,但仍然可以快速破解