我正在为一个相对成熟的开源 PHP 项目做贡献。最近,我发现它将密码存储为普通的 MD5 哈希,这对我来说很麻烦。我想如果我要修复它,我不妨做对(tm),所以我想使用 bcrypt。
首先,我对其他语言的发现:bcrypt-ruby似乎使用了来自 OpenBSD 的原始 C 代码或jBCrypt的 java 代码。 py-bcrypt是 BSD 代码的精简包装器。 BCrypt.net是 jBCrypt 的直接端口。
现在,PHP 本身在crypt 函数中支持 bcrypt(尽管被误导地简称为“blowfish”)。但是,5.3 之前的版本需要系统本身的支持,通常由crypt_blowfish提供。 phpass也是一样,建议安装 PHP 5.3 或Suhosin。
由于该应用程序的许多用户使用标准共享主机,我不想要求对服务器进行任何特殊配置。我希望只是从 PHP 的 5.3 版本中窃取代码,但它是用 C 语言编写的,并且(从我刚刚完成的一小部分阅读中)我不能要求项目用户使用 C 扩展。
我想只创建一个纯 PHP 的 bcrypt 端口,但是查看jBCrypt 的来源,我不确定我是否应该这样做,因为我对 PHP 或河豚都不是非常熟悉,而且这里可能同时出现错误首先是危险且难以检测的。
因此,我向您提出两个(多部分)问题:
- 是我缺乏 PHP 知识让我变得最好吗?我真的可以使用已经创建的实现之一吗?
- 我是否应该只创建一个简单的循环函数来调用
sha1()
或md5()
重复一些可配置的次数?