使用 Blowfish 通过 PHP 进行加密


Using Blowfish for Encryption with PHP

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

简短的回答是使用crypt,盐以字符 $2a$ 开头,两位数成本参数 $,以及字母表中的 22 位数字 ./0-9A-Za-z。这仅适用于支持河豚加密算法的系统。但是,PHP 5.3 是原生实现的。请参阅 PHP 手册 — crypt 了解更多细节。

例:

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

盐字符串触发相应的算法。两位成本参数是基于 Blowfish 的底层哈希算法的迭代计数的以 2 为底的对数,必须在 [04 – 31] 范围内。在示例中,07 告诉算法使用 27 或 128 次迭代。这个数字越大,执行 BUT 所需的时间就越长,但是,在散列用户密码的上下文中,这是一件事。

这个类似问题的答案更详细地解释了 BCrypt 是什么,它与河豚的关系,以及为什么要使用它。关于堆栈溢出还有许多其他相关主题。


phpass是一个优秀的,易于使用的密码哈希框架,适用于所有系统,如果支持,则使用Blowfish,如果不支持,则回退到其他算法。

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