如何使用PHP中的Blowfish创建和存储密码哈希

27 php security passwords crypt blowfish

1)如何使用crypt()创建安全的Blowfish哈希密码?

$hash = crypt('somePassword', '$2a$07$nGYCCmhrzjrgdcxjH$');
Run Code Online (Sandbox Code Playgroud)

1a)"$ 2a"的意义是什么?它只是表明应该使用Blowfish算法吗?
1b)"07美元"有什么意义?更高的值意味着更安全的哈希吗?
1c)"$ nGYCCmhrzjrgdcxjH $"有什么意义?这是将要使用的盐吗?这应该随机生成吗?硬编码?

2)你如何存储河豚的哈希?

echo $hash;
//Output: $2a$07$nGYCCmhrzjrgdcxjH$$$$.xLJMTJxaRa12DnhpAJmKQw.NXXZHgyq
Run Code Online (Sandbox Code Playgroud)

2a)这应该存储在数据库中的哪一部分?
2b)列应该使用什么数据类型(MySQL)?

3)如何验证登录尝试?

xyp*_*oid 13

你应该存储crypt的整个输出,分解它并不是很重要,因为你需要为你在任何情况下散列的每个密码生成一个新的salt.使用Matt提到的固定隐藏盐是错误的 - 每个哈希值的盐应该是不同的.

有关更多信息,请参阅http://www.openwall.com/articles/PHP-Users-Passwords - 我建议使用phpass库,因为它处理为您生成随机盐,与crypt()不同.

  • http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html是另一个优秀的资源. (2认同)