我有一个简单的问题要问你们:
我正在修补 PHP(我相对缺乏经验),并且有兴趣开发一个安全的密码散列系统以在我的网站上使用。通过关于 SO 的其他文章和问题,我推测我应该使用 PHP 的crypt()
函数来实现 BSD 的bcrypt
哈希算法。
我向您提出的问题是,当我为函数提供初始化向量或密码时,不是 base64 的输入似乎返回“0”作为哈希值。这是我为解决此问题而实施的方法:
$salt = base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM));
和
$password = base64_encode($password);
当我像这样更改编码时,是否存在碰撞危险或以其他方式降低安全性?
我的想法是,我希望允许用户使用任何范围的字符作为他们的密码(我将执行一个好的密码策略),而不必担心我的散列函数返回一个空的散列。
有没有更简单或更优雅的方法来做到这一点?我是否应该使用不会限制我的盐和密码的哈希函数?
提前感谢您能给我的任何帮助。