Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.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 密码散列:自动生成的salt比手动生成的salt有什么优势?_Php_Password Encryption - Fatal编程技术网

Php 密码散列:自动生成的salt比手动生成的salt有什么优势?

Php 密码散列:自动生成的salt比手动生成的salt有什么优势?,php,password-encryption,Php,Password Encryption,若我理解正确,任何PHP升级,或移动到不同的服务器将使以前散列的密码(存储在数据库中)无用?因为在一个新的系统中,盐是不同的 这让我对自动生成的salt的用例感到好奇 为每个密码生成salt,并作为从password\u散列函数返回的字符串的一部分存储。因此,每次对密码进行哈希运算时,结果都会有所不同。我们在密码中使用salt的原因是每次创建一个新的散列时都会得到一个新的散列,因此如果两个用户使用密码“hunter2”,它们将作为完全不同的值存储在数据库中,从而使rainbow表变得无用 因此,

若我理解正确,任何PHP升级,或移动到不同的服务器将使以前散列的密码(存储在数据库中)无用?因为在一个新的系统中,盐是不同的


这让我对自动生成的salt的用例感到好奇

为每个密码生成salt,并作为从password\u散列函数返回的字符串的一部分存储。因此,每次对密码进行哈希运算时,结果都会有所不同。我们在密码中使用salt的原因是每次创建一个新的散列时都会得到一个新的散列,因此如果两个用户使用密码“hunter2”,它们将作为完全不同的值存储在数据库中,从而使rainbow表变得无用


因此,移动到新服务器不会使以前散列的密码变得无用。

salt是为每个密码生成的,并作为从password\u散列函数返回的字符串的一部分存储。因此,每次对密码进行哈希运算时,结果都会有所不同。我们在密码中使用salt的原因是每次创建一个新的散列时都会得到一个新的散列,因此如果两个用户使用密码“hunter2”,它们将作为完全不同的值存储在数据库中,从而使rainbow表变得无用

因此,移动到新服务器不会使以前的哈希密码无效。

现在(从PHP7.1开始。*)只使用
bcrypt
对密码进行哈希。Salt和哈希一起保存,所以升级或移动到另一台服务器不会使哈希变得无用

正如杰伊·布兰查德(Jay Blanchard)所说,自动食盐是一种优势,因为你不必在意。所有这些都是方便和自动处理

您甚至不应该自己创建盐,因为它在自己生成盐时也非常重要(非随机盐、不正确的随机盐源等)

此外,
salt
选项从PHP7.0.0开始在
password\u hash
bcrypt
算法中被弃用,因此PHP将始终使用自动生成的salt。

现在(从PHP7.1.*开始)只使用
bcrypt
对密码进行哈希运算。Salt和哈希一起保存,所以升级或移动到另一台服务器不会使哈希变得无用

正如杰伊·布兰查德(Jay Blanchard)所说,自动食盐是一种优势,因为你不必在意。所有这些都是方便和自动处理

您甚至不应该自己创建盐,因为它在自己生成盐时也非常重要(非随机盐、不正确的随机盐源等)


此外,
salt
选项从PHP7.0.0开始在
password\u hash
bcrypt
算法中被弃用,因此PHP将始终使用自动生成的salt。

如果要使用手动salt,可以使用它。即使您移动到新服务器,以前的密码也不会无用

诀窍是你们可以将你们的手动salt字符串存储在你们通常存储站点常量的地方,例如,Db username,Db password


因此,即使您移动到新服务器,您仍然使用手动salt字符串和以前的salt数据

如果你想使用人工食盐,你可以使用它。即使您移动到新服务器,以前的密码也不会无用

诀窍是你们可以将你们的手动salt字符串存储在你们通常存储站点常量的地方,例如,Db username,Db password


因此,即使您移动到新服务器,您仍然使用手动salt字符串和以前的salt数据

相关问题:当然有一个优势——它们是随机的,你不必担心盐。我从来没有听说过升级或移动会破坏
password\u verify()
解析散列的能力。一旦创建了散列,它总是可以被AIK解析。强烈建议您不要为此函数生成自己的salt。如果您未指定安全盐,它将自动为您创建安全盐。()。生成的(或手动)salt作为从
密码\u散列
返回的散列的一部分存储。从那时起,你不应该使用任何东西,除了
password\u verify
(和
password\u needs\u rehash
)之外,它们所需要的只是原始的复合哈希。相关问题:当然有一个优势——它们是非常随机的,你不必担心盐。我从来没有听说过升级或移动会破坏
password\u verify()
解析散列的能力。一旦创建了散列,它总是可以被AIK解析。强烈建议您不要为此函数生成自己的salt。如果您未指定安全盐,它将自动为您创建安全盐。()。生成的(或手动)salt作为从
密码\u散列
返回的散列的一部分存储。从那时起,您不应该使用除
密码_验证
(和
密码_需要重新设置
)之外的任何东西,它们所需要的只是原始的复合散列。;)一种适用于所有用户的站点范围内的静态盐,也称为“胡椒”,不能替代每用户盐。它可以作为一种额外的安全措施,但绝不是替代品。面向所有用户的站点范围的静态盐,也被称为“胡椒”,不能替代每用户盐。它可以用作额外的安全措施,但不能替代。