【发布时间】:2012-05-20 11:19:22
【问题描述】:
我将把它用于用户密码系统,但我首先要确保我做得正确。这是我的测试代码:
函数 generateBlowfishSalt() {
$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ./';
$numChars = strlen($chars);
$盐='';
for($i = 0; $i ', $password);
printf('salt: %s', $salt);
printf('hash1: %s', $hash1);
printf('hash2: %s', $hash2);
printf('比较:' .$compare);
这是一个示例输出:
密码:foo 盐:MYVJ32OqLcMGBar3pUa.0S hash1: $2a$12$MYVJ32OqLcMGBar3pUa.0OTRwv6UX0bcxnSmheKOcqjvqvCrM/p2q hash2: $2a$12$MYVJ32OqLcMGBar3pUa.0OTRwv6UX0bcxnSmheKOcqjvqvCrM/p2q 比较:1
我的主要问题是:
我是否正确生成了 22 个字符的盐?我见过的一些实现使用
base64_encode()来生成盐。我需要这样做吗?将整个
$hash1值存储在数据库中并且不存储单独的盐值是否正确,因为$hash1将包含盐值,而这就是我验证密码所需的全部内容?在 PHP
crypt()文档页面上,CRYPT_BLOWFISH示例有一个用于 salt 参数的结尾$(它是:'$2a$07$usesomesillystringforsalt$')。但在所有示例中,我看到没有人使用尾随$。是可选的吗?
谢谢
【问题讨论】: