我正在为一个相对成熟的开源PHP项目做出贡献。最近,我发现它将密码存储为纯 MD5 哈希值,这对我来说相当麻烦。我想如果我要修复它,我不妨做对(tm),所以我想使用 bcrypt。
首先,我对其他语言的发现:bcrypt-ruby似乎使用 OpenBSD 的原始 C 代码或jBCrypt的java代码。py-bcrypt是 BSD 代码的薄包装。BCrypt.net是一个直接港口jBCrypt.
现在,PHP 本身支持 bcrypt(尽管容易被误称为“blowfish”)地穴函数。不过5.3之前的版本需要系统本身的支持,一般由地穴河豚. phpass是一样的,建议安装 PHP 5.3 或Suhosin.
由于该应用程序的许多用户使用标准共享托管,因此我不想要求对服务器进行任何特殊配置。我本来希望只是从 PHP 5.3 版本中窃取代码,但它是用 C 语言编写的,并且(从我刚刚完成的少量阅读来看)我不能要求项目用户使用 C 扩展。
我想只创建一个 bcrypt 的纯 PHP 端口,但是看看jBCrypt的来源,我不确定我应该这样做,因为我对 PHP 或河豚都不太熟悉,而且这里的错误可能既危险又难以检测。
因此,我向您提出两个(多部分)问题:
- 我是否因为缺乏 PHP 知识而变得更加优秀?我真的可以使用已经创建的实现之一吗?
- 我应该创建一个简单的循环函数来调用
sha1()
or md5()
重复某些可配置的次数?
我是否因为缺乏 PHP 知识而变得更加优秀?我真的可以使用已经创建的实现之一吗?
不幸的是,你是对的。在 5.3.0 之前,PHP 默认不支持 bcrypt。相反,它依赖于操作系统的支持(检查CRYPT_BLOWFISH
持续的)。正如你所指出的Suhosin在这种情况下是一个选项。
我是否应该创建一个简单的循环函数来重复调用 sha1() 或 md5() 一些可配置的次数?
谈到密码学,最好的建议是“不要自己开发”。多次致电sha1()
or md5()
可以不可以增加安全性。
另一方面,bcrypt 的作者解释了他们的设计决策这张纸.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)