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时';s crypt()函数创建bcrypt哈希,是否需要一个salt?_Php_Hash_Passwords_Cryptography_Bcrypt - Fatal编程技术网

使用PHP时';s crypt()函数创建bcrypt哈希,是否需要一个salt?

使用PHP时';s crypt()函数创建bcrypt哈希,是否需要一个salt?,php,hash,passwords,cryptography,bcrypt,Php,Hash,Passwords,Cryptography,Bcrypt,我知道PHP的crypt()函数的工作原理如下: crypt($password,$salt); 要创建bcrypt哈希(被认为是非常安全的),格式为: crypt("$2y$15$password",$salt); 其中$2y指定使用bcrypt,15是轮数,应该大于10 这是我的问题。运行: crypt("$2y$15$password"); 据我所知,生成一个很好的大随机salt并将其添加到散列中,当比较密码时,这是自动提取的。这意味着我不必在我的桌子上有盐场,也不必独立生产盐。这是

我知道PHP的crypt()函数的工作原理如下:

crypt($password,$salt);
要创建bcrypt哈希(被认为是非常安全的),格式为:

crypt("$2y$15$password",$salt);
其中$2y指定使用bcrypt,15是轮数,应该大于10

这是我的问题。运行:

crypt("$2y$15$password");
据我所知,生成一个很好的大随机salt并将其添加到散列中,当比较密码时,这是自动提取的。这意味着我不必在我的桌子上有盐场,也不必独立生产盐。这是否安全和正确

例如,当我运行时:

$test = "Hello";
echo crypt("$2y$15$test") . "\n";
我得到:

 $6$R59d/nemygl0$/Gk6s57K2eFAkH4BWDGYhfdhbYGcqz.GRbD7qGDKOlhE5Lk.kgCoGQo/sDCCf1VDffdh7jtXPn/9rsexwrpFk1 
其中前6表示某个算法编号,两个$之间的下一位是salt,后面的位是hash。这是正确的吗

另外,将此散列与另一个散列进行比较以进行验证的语法是什么?
谢谢。

我认为您使用的crypt使用SHA-512

您可能忘记在crypt()中通过$test作为参数

根据php,您应该将密码作为第一个参数(不带任何前缀)传递,然后将salt作为第二个参数传递,并带有$2y$15前缀和22个字符的salt。例如

crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$');
函数
crypt()
的用法如下:

$hashvalue = crypt($password, $cryptParams);
然而,盐必须由您自己生成,并且是$cryptParams的一部分

$bcryptAlgo = '$2y';
$cost = '$15';
$salt = '$' . functionThatGenerates22CharRandomSalt();
$cryptParams = $bcryptAlgo . $cost . $salt;
困难之一是生成有效的、唯一的和不可预测的salt。您所能做的最好的事情就是从操作系统随机源中读取数据

PHP5.5将拥有自己的函数
password\u hash()
password\u verify()
以简化此任务。我强烈建议使用这个优秀的api,还有一个适用于早期PHP版本的api。如果你想知道更多关于如何使用crypt的知识,请看一下这个

您的成本参数15是相当高的,如果您有足够的时间,请使用它,但今天的数字10是可以的