2

我有一个简单的问题要问你们:

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

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

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

$password = base64_encode($password);

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

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

有没有更简单或更优雅的方法来做到这一点?我是否应该使用不会限制我的盐和密码的哈希函数?

提前感谢您能给我的任何帮助。

4

2 回答 2

1

在 base64 下对其进行编码不会增加冲突的机会,因为它只是一对一的翻译。它不会减少密码干草堆。

于 2012-07-23T05:31:54.693 回答
0

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

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

于 2012-07-23T05:38:03.877 回答