2013-07-09 218 views
1

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

+0

散列密码一百万次比简单散列一次速度慢并且不安全 –

+0

@MarkBaker实际上,一个缓慢的散列过程对密码是有好处的,但对md5或任何sha *算法都是好的...... – Bun

+0

MD5是不可能解密。为了存储密码,它会没事的。不是吗? – meorfi

回答

6

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

+7

'发音“pH传递”'suuuuuure ... – Bojangles

2

你不找加密 - 你想找的散列。

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

如果您正在使用PHP5.5他们有一个密码hasing API http://uk3.php.net/password

获取更多信息。

MD5(无盐)已经被使用了一段时间,大量的查找列表已经被使用了,与现代硬件每秒获得700K +密码相结合,不需要很长时间就可以“反转”密码。

用盐他们更安全,但还是可以很快被破解

+0

解释为什么一个人应该避免MD5。 –

+0

哪个方法我更喜欢phpass crypt或hash。 –

+0

HashPassword($ password)对它进行散列和CheckPassword($ password,$ hash)来检查它 – exussum

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电量,而不会影响您的网站性能。

最后一条评论:假设黑客已经可以访问包含用户名和散列密码的表,那么您可能在此时更担心他们可以在您的网站上做的所有坏事。

+0

为什么SHA512,而不是漩涡? –

+0

是的,的确,你可以使用任何强大的哈希算法寻找输出。 – Tarik

+0

没错。那么,为什么建议具体的一个,如果有几十速度很慢,大算法和安全性?为什么SHA512,而不是其它的呢?如果您指定的那一个,那么什么是其背后的原因是什么?个人喜好,它在网络环境等真的很好吗?是的,SHA512是伟大的,但也有类似的报告。为什么要限制你的回答1算法? –