在PHP 5.2中保存密码时替代bcrypt

时间:2011-12-02 20:17:38

标签: php encryption

我在本地使用bcrypt因为xampp有PHP 5.3但在线我的主机帐户只有PHP 5.2。是否有一个很好的替代方案我可以用于5.2?

4 个答案:

答案 0 :(得分:2)

我想我应该更新并改进这个答案,因为我在过去几年里学到了很多关于密码哈希的知识。

PHP 5.5版将提供一种使用BCrypt的便捷方式,对于PHP 5.3.7及更高版本,存在兼容包。请查看此answer

对于5.3之前的PHP版本,建议使用phpass库,它们支持PHP回到版本3.

答案 1 :(得分:1)

  

我正在使用bcrypt ...我可以使用哪种方法适用于5.2?

请参阅Openwall' PHP password hashing framework(PHPass)。它的便携性和硬化能够抵御一些对用户密码的常见攻击。编写框架的人(SolarDesigner)与编写John The Ripper并在Password Hashing Competition中担任评委的人是同一个人。所以他对密码的攻击知道了一两件事。

答案 2 :(得分:0)

查看Mcrypt PHP扩展程序。它已经存在了很长时间,并且有几种不同的算法。 bcrypt似乎只是一个Blowfish包装器。你可以很容易地使用PHP的crypt()函数,并传递适当的盐来强制函数使用Blowfish:

// crypt($plaintext, $salt);
// How you define $salt determines the encryption algorithm used
$hash = crypt('PASSWORD', '$2a$12$Some22CharacterSaltXXO');
echo $hash;

// Output would be $2a$12$Some22CharacterSaltXXO6NC3ydPIrirIzk1NdnTz0L/aCaHnlBa

PHP手册页(上面链接)解释了为什么密码盐看起来像我上面的例子中那样。 $2a$告诉PHP使用Blowfish,12$是一个成本修饰符; 04之间的数字(是的,它必须是2位数)和31(我相信)影响散列机制使用的迭代次数。正如您所看到的,salt包含在调用crypt()的输出中,因此当您需要根据哈希检查某些内容时,您需要首先检索哈希(从存储它的文件或数据库)到拿出盐。

答案 3 :(得分:-3)

这取决于您存储密码的位置和内容。

对于在线网站(有用户等+),我会这样做:

$ hash =“jr38028(/#Fjg4i4g438h9)(#Hhhf3,..;呃#F)8”; $ hashed = sha1($ hash。$ PASSWORD。$ hash); //其中$ PASSWORD是保存密码的变量。 echo $ hashed; //显示哈希密码。

做错事后编辑。忘了在函数内部哈希,也改为sha1而不是md5。和仇恨,也爱你< 3