2012-06-24 55 views
6

我正在注册表单上,我需要加密密码,我听说它是​​建议我使用Blowfish加密的密码,你如何实现使用PHP的blowfish加密crypt()函数?另外,我打算以后找回密码登录。使用Blowfish与PHP加密

+0

看看[this](http://www.chilkatsoft.com/p/php_blowfish.asp)。 –

+1

您不应“加密”密码,而应使用单向散列函数。请参阅:[如何在PHP中使用bcrypt进行散列密码?](http://stackoverflow.com/q/4795385/911182) – Herbert

+0

另请阅读:[如何安全地存储我的用户密码?](http:/ /stackoverflow.com/questions/1581610/how-can-i-store-my-users-passwords-safely/1581919#1581919) – Jacco

回答

6

简短的回答是使用crypt与盐以字符开始$ 2A $,一个两位数成本参数,$,和来自字母表的22位数字./0-9A-Za-z。这只适用于支持Blowfish加密算法的系统。但是,PHP 5.3本地实现了它。有关更多详细信息,请参阅PHP manual — crypt

实施例:

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

盐串触发适当的算法。两位数代价参数是基础Blowfish散列算法的迭代计数的基数为2的对数,并且必须在范围内[04 – 31]。在示例中,07告诉算法使用2个或多个迭代128个。这个数字越高,执行BUT所需的时间越长,在散列用户密码的情况下,这是一个GOOD的事情。

This answer to a similar question更详细地解释了BCrypt是什么,它与Blowfish的关系以及为什么你应该使用它。还有许多其他related topics here on Stack Overflow


phpass是一个很好的,易于使用的密码哈希框架,在所有系统上的工作原理,使用河豚如果支持它’ S,并回落至其它的算法,如果它’不是。

4

你不应该需要河豚来加密这样的密码。注册表格应该通过HTTPS,该HTTPS将处理针对攻击者的防线。它自己的密码应该被散列(永不加密)。 bcrypt是一个基于河豚的好密码哈希函数。但是有很多帖子与SO上的安全密码存储相关。

+1

+1我可能应该提到HTTPS。 – Herbert

+0

[Heartbleed漏洞](http://heartbleed.com/)之后,我想没有什么是完全安全的。 – ontananza