0

在数据库中存储用户密码时,我决定放弃 md5() 作为密码加密算法,转而使用phpass库。

在使用 md5 的系统上,有一个生产/开发二元组是没有问题的,因为生成的哈希是相同的。因此,如果我在其中任何一个中创建了一个测试用户,那么相同的密码在另一个环境中也可以使用。

据我所知,这对于其他类型的散列算法来说是不一样的,因为 phpass(或其内部 php 函数)会创建与平台相关的散列(我是散列/加密新手)。

我的问题是,应该如何处理这种情况?prod/dev 中的不同数据库?但是如果“楼上”决定我们应该将我们的 Web 应用程序(连同它的 DB)移动到另一台服务器上——哈希密码现在不会无效——因为 phpass 会为相同(旧)密码创建不同的哈希值吗?

后期编辑:

好吧,我没有费心检查生产哈希的开发哈希。尽管它们不同,但它们的比较结果是“真实的”,就像“它们是等效的”一样。我想,如果哈希值不同,它们就不匹配(如 md5)。

4

3 回答 3

2

解决您的问题的一个非常简单的方法:始终使用最新的稳定版本的 PHP。从 5.3 开始,PHP 提供了crypt算法的本机实现,因此不再依赖于平台。因此,您的哈希应该是兼容的。

于 2011-09-11T15:08:23.890 回答
0

您决定使用 phpass 库有什么特别的原因吗?您没有详细说明这一点,但如果您只是在寻找比 MD5 更安全的算法,请查看hash()与 sha512 之类的算法相结合。

于 2011-09-11T14:55:12.277 回答
0

PHP 中的 Tiger 算法

Tiger192,4算法通常被推荐用于散列,但是我刚刚发现您可以在不同的机器上获得不同的散列值。

不可能的!(你说)

好吧,事实证明 PHP <5.4首先Tiger使用LSB实现,而 PHP 5.4+ 则首先Tiger使用MSB实现。哪个是对的?我不能说(LSB 与testtiger匹配,而 MSB 与wikipedia示例匹配)但关键是……如果哈希需要可移植或在 PHP 升级后幸存下来(PHP 5.3-> 5.4 将破坏散列密码,请不要使用TigerTiger表,这具有重要的可维护性含义)。

去测试...

echo hash("tiger192,3","The quick brown fox jumps over the lazy cog")."\n".
     hash("tiger192,3","");

MSB:(PHP 5.4.5)
a8f04b0f7201a0d728101c9d26525b31764a3493fcd8458f
3293ac630c13f0245f92bbb1766e16167a4e58492dde73f3

LSB:(PHP 5.3.2)
d7a001720f4bf0a8315b52269d1c10288f45d8fc93344a76
24f0130c63ac933216166e76b1bb925ff373de2d49584e7a

(我的解决方案?使用不同的算法,在单元测试代码中嵌入已知的哈希测试)

于 2012-09-24T15:11:48.540 回答