Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php BCRYPT和随机盐一起存储在数据库中_Php_Mysql_Security_Encryption_Bcrypt - Fatal编程技术网

Php BCRYPT和随机盐一起存储在数据库中

Php BCRYPT和随机盐一起存储在数据库中,php,mysql,security,encryption,bcrypt,Php,Mysql,Security,Encryption,Bcrypt,我正在升级我的网站的安全级别 在研究存储密码的最佳方法时,我在PHP5.3中找到了BCRYPT选项。我实现这个函数是为了使用静态SALT,但是我读到每个密码都应该有不同的SALT,否则就达不到这个目的 我应该将SALT存储在数据库中,并且用户记录为纯文本吗?这是否也违背了目的?或者我应该使用md5散列盐并将其存储在数据库中 在执行此操作和存储盐时,最好的方法是什么?您应该为每个用户创建一个新的随机盐,并将其与哈希一起存储在数据库中。大多数bcrypt实现已经做到了这一点。如果查看输出,您将看到它

我正在升级我的网站的安全级别

在研究存储密码的最佳方法时,我在PHP5.3中找到了BCRYPT选项。我实现这个函数是为了使用静态SALT,但是我读到每个密码都应该有不同的SALT,否则就达不到这个目的

我应该将SALT存储在数据库中,并且用户记录为纯文本吗?这是否也违背了目的?或者我应该使用md5散列盐并将其存储在数据库中


在执行此操作和存储盐时,最好的方法是什么?

您应该为每个用户创建一个新的随机盐,并将其与哈希一起存储在数据库中。大多数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.另见: