使用PHP';时使用base64_encode;s crypt()函数


Using base64_encode when using PHP's crypt() function

我有一个快速问题要问你们:

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

我想问你的问题是,当我向函数提供初始化向量或密码时,非base64的输入似乎会返回一个"0"作为散列。以下是我为解决这个问题而实现的内容:

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

$password = base64_encode($password);

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

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

有没有更简单或更优雅的方法可以做到这一点?我应该使用一个哈希函数来限制我的salt和密码吗?

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

在base64下编码不会增加冲突的机会,因为它只是一对一的转换。它不会减少密码的混乱。

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

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