使用PHP的crypt()函数时使用base64_encode

时间:2012-07-23 05:27:46

标签: php hash bcrypt crypt password-encryption

我有一个简短的问题给你们:

我正在修补PHP(我相对缺乏经验),并且有兴趣开发一个安全的密码散列系统,以便在我的网站上使用。通过关于SO的其他文章和问题,我推测我应该使用PHP的crypt()函数来实现BSD的bcrypt散列算法。

我向您提出的问题是,当我向函数提供初始化向量或密码时,非base64的输入似乎返回“0”作为哈希。以下是我为解决此问题而实施的内容:

$salt = base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM));

$password = base64_encode($password);

当我更改这样的编码时,是否存在碰撞危险或以其他方式降低安全性?

我的想法是,我希望允许用户使用任何范围的字符作为其密码(我将强制执行一个良好的密码策略),而不必担心我的哈希函数返回空哈希。

有更简单或更优雅的方法吗?我是否应该使用不限制我的盐和密码的哈希函数?

提前感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

在base64下对其进行编码不会增加冲突的可能性,因为它只是一对一的翻译。它不会减少密码haystack。

答案 1 :(得分:0)

对于php中的散列,我建议使用hash函数。它需要一个算法才能使用,所以你可以通过sha或其他任何东西抛出它。

至于碰撞,我不担心它们,你不太可能受到碰撞的影响。