我使用的是PHP。我想要一个安全快速的密码加密系统。将密码散列一百万次可能会更安全,但也会更慢。如何在速度和安全性之间取得良好的平衡?我想知道在php中最好的加密方法以及如何应用它。
发布于 2013-07-09 19:18:08
我推荐使用新的PHP 5.5 password API。它提供了一种安全的方式来散列密码,同时又足够快。
如果您没有可用的PHP5.5,有一个可以与PHP5.5一起使用的polyfill:https://github.com/ircmaxell/password_compat
发布于 2013-07-09 19:17:22
使用PHPass,它是一个优秀的哈希框架,非常容易使用!
发布于 2013-07-09 19:23:13
使用SHA512 http://php.net/manual/en/function.hash.php。SHA512未被破解。我建议使用salt:在散列之前附加到密码的一些随机字符串。这可以防止预先计算的彩虹表,但不能防止字典攻击,如果攻击者获得了对包含密码和盐的数据库的访问权限。SHA512(password + salt) --> hash检查密码时,在数据库中存储hash和salt,检索用户对应的salt,将其与password连接,hash并与存储的hash进行比较。点击此处阅读:How long to brute force a salted SHA-512 hash? (salt provided)
回想一下你的问题,特别是你的陈述“哈希密码一百万次可能更安全,但也更慢。如何在速度和安全性之间取得良好的平衡”。实际上,重复的散列将使计算字典中的所有散列的计算成本过高,从而保护您免受字典攻击。我不会在这里教你任何东西。从我给你的第一个链接开始,计算一个SHA512散列花费了大约46毫秒,这是一个相对较长的过程。当你处于军备竞赛环境中时,我可以立即想到以下因素,这些因素可能会影响你的决定:-不断增加的计算能力(更多的CPU核心和GPU计算)-随着时间的推移改进的算法-攻击者可用的金钱数量-如果破解了你的网站(如果破解了,就不值得努力)- CPU能力的数量作为一个经验法则,我会尽可能多次地散列,以免影响我的网站性能。考虑到每秒的登录次数,您可以粗略地计算出您可以在不影响站点性能的情况下花费多少CPU功率。
最后一条评论:假设黑客已经访问了包含用户名和散列密码的表,那么在这一点上,您可能会更担心他们可能在您的网站上做的所有坏事。
https://stackoverflow.com/questions/17546826
复制相似问题