【问题标题】:Using Blowfish for Encryption with PHP使用 Blowfish 通过 PHP 进行加密
【发布时间】:2012-06-25 03:38:50
【问题描述】:
我正在处理需要加密密码的注册表单,我听说建议我对密码使用 Blowfish 加密,如何使用 PHP crypt() 函数实现 Blowfish 加密?另外,我打算稍后找回密码以进行登录。
【问题讨论】:
标签:
php
security
blowfish
【解决方案1】:
简短的回答是使用crypt 和以字符$2a$ 开头的盐,两位数的成本 参数,$ , 以及字母 ./0-9A-Za-z 中的 22 位数字。这仅适用于支持 Blowfish 加密算法的系统。然而,PHP 5.3 原生实现了它。详情请见PHP manual — crypt。
例子:
crypt('rasmuslerdorf', '$2a$07$somesillystringforsalt')
盐字符串触发适当的算法。两位数的 cost 参数是底层基于 Blowfish 的哈希算法的迭代计数的以 2 为底的对数,并且必须在 [04 – 31] 范围内。在示例 07 中,告诉算法使用 27 或 128 次迭代。这个数字越高,执行的时间就越长,但是在散列用户密码的情况下,这是一件GOOD的事情。
This answer to a similar question 更详细地解释了 BCrypt 是什么、它与 Blowfish 的关系以及为什么要使用它。还有很多其他related topics here on Stack Overflow。
phpass 是一个出色的、易于使用的密码哈希框架,适用于所有系统,如果支持则使用 Blowfish,如果不支持则回退到其他算法。
【解决方案2】:
您永远不需要河豚来加密这样的密码。注册表单应通过 HTTPS 进行,这将处理对网络攻击者的防御。密码本身应该被散列(从不加密)。 bcrypt 是一个很好的基于河豚的密码哈希函数。但是有很多与 SO 上的安全密码存储相关的帖子。