Php BCRYPT和随机盐一起存储在数据库中
我正在升级我的网站的安全级别 在研究存储密码的最佳方法时,我在PHP5.3中找到了BCRYPT选项。我实现这个函数是为了使用静态SALT,但是我读到每个密码都应该有不同的SALT,否则就达不到这个目的 我应该将SALT存储在数据库中,并且用户记录为纯文本吗?这是否也违背了目的?或者我应该使用md5散列盐并将其存储在数据库中Php BCRYPT和随机盐一起存储在数据库中,php,mysql,security,encryption,bcrypt,Php,Mysql,Security,Encryption,Bcrypt,我正在升级我的网站的安全级别 在研究存储密码的最佳方法时,我在PHP5.3中找到了BCRYPT选项。我实现这个函数是为了使用静态SALT,但是我读到每个密码都应该有不同的SALT,否则就达不到这个目的 我应该将SALT存储在数据库中,并且用户记录为纯文本吗?这是否也违背了目的?或者我应该使用md5散列盐并将其存储在数据库中 在执行此操作和存储盐时,最好的方法是什么?您应该为每个用户创建一个新的随机盐,并将其与哈希一起存储在数据库中。大多数bcrypt实现已经做到了这一点。如果查看输出,您将看到它
在执行此操作和存储盐时,最好的方法是什么?您应该为每个用户创建一个新的随机盐,并将其与哈希一起存储在数据库中。大多数bcrypt实现已经做到了这一点。如果查看输出,您将看到它是一个包含salt的$separated值。您应该为每个用户创建一个新的随机salt,并将其与哈希一起存储在数据库中。大多数bcrypt实现已经做到了这一点。如果查看输出,您将看到它是一个包含盐的$separated值。。因此,除非您使用与之不同的实现,否则您不需要另一个salt 请注意,salt的主要目的是使每个输入都是唯一的,这样查找表辅助的字典攻击存储值就不切实际了 提醒我,中的PHP本机bcrypt实现不会自动生成salt。所以你必须自己做,例如:
$salt = substr(str_replace('+', '.', base64_encode(call_user_func_array('pack', array_merge(array('H14N'), explode('.', uniqid('', true)))).pack('N2', mt_rand(), mt_rand()))), 0, 22);
$hash = crypt($password, '$2a$10$'.$salt.'$');
这个。因此,除非您使用与之不同的实现,否则您不需要另一个salt
请注意,salt的主要目的是使每个输入都是唯一的,这样查找表辅助的字典攻击存储值就不切实际了
提醒我,中的PHP本机bcrypt实现不会自动生成salt。所以你必须自己做,例如:
$salt = substr(str_replace('+', '.', base64_encode(call_user_func_array('pack', array_merge(array('H14N'), explode('.', uniqid('', true)))).pack('N2', mt_rand(), mt_rand()))), 0, 22);
$hash = crypt($password, '$2a$10$'.$salt.'$');
我应该用md5对盐进行编码以增加安全性吗?我知道盐和奶油是怎么起作用的。我只是感到困惑,当存储salt时,它可以帮助密码破解。难道我不能使用$salt=md5$row[salt]比较字符串吗$check=crypt$row[密码],$salt;如果$check==$loginpass{*大多数BCyrpt实现自动创建salt。不幸的是,PHP实现没有。我应该用md5对salt进行编码以获得额外的安全性吗?我理解salt和bcrypt是如何工作的。我只是感到困惑,当存储salt时,它可以帮助密码破解。我难道不能使用$salt=md5$row[salt]来比较字符串吗;$check=crypt$row[password],$salt;if$check==loginpass{*大多数BCyrpt实现自动创建一个salt。不幸的是,PHP实现没有。不幸的是,PHP中的BCyrpt实现没有自动创建salt。@Jacco PHP5.5中新增的函数会自动生成bcrypt salt。不幸的是,PHP中的BCyrpt实现没有自动创建salt。@Jacco函数,nPHP 5.5中的ew会自动生成bcrypt salt。看看这个库。它提供了使用bcrypt进行密码哈希的插入功能,被广泛认为是一个好的安全库。另请参阅:看看这个库。它提供了使用bcrypt进行密码哈希的插入功能,被广泛认为是一个好的安全libr11.另见: