6

我正在处理需要加密密码的注册表单,我听说建议我对密码使用 Blowfish 加密,如何使用 PHP crypt() 函数实现河豚加密?另外,我打算稍后检索密码以进行登录。

4

2 回答 2

7

简短的回答是使用以字符$2a$crypt开头的盐、两位数的成本参数$和字母表中的 22 位数字./0-9A-Za-z。这仅适用于支持 Blowfish 加密算法的系统。然而,PHP 5.3 原生实现了它。有关更多详细信息,请参阅PHP 手册 — crypt

例子:

crypt('rasmuslerdorf', '$2a$07$somesillystringforsalt')

盐字符串触发适当的算法。两位数的成本参数是底层基于 Blowfish 的散列算法的迭代计数的以 2 为底的对数,并且必须在 [04 – 31] 范围内。在示例中,07 告诉算法使用 2 7或 128 次迭代。这个数字越高,执行时间越长,但是在散列用户密码的情况下,这是一件好事

这个对类似问题的回答更详细地解释了 BCrypt 是什么,它与 Blowfish 的关系,以及为什么要使用它。Stack Overflow 上还有许多其他相关主题


phpass是一个出色的、易于使用的密码散列框架,适用于所有系统,如果支持则使用 Blowfish,如果不支持则回退到其他算法。

于 2012-06-24T04:09:44.923 回答
4

您永远不需要河豚来加密这样的密码。注册表单应通过 HTTPS 进行,这将处理对网络攻击者的防御。密码本身应该被散列(从不加密)。bcrypt 是一个很好的基于河豚的密码哈希函数。但是有很多与 SO 上的安全密码存储相关的帖子。

于 2012-06-24T19:38:50.110 回答