[英]password_hash function in php 5.5
我有以下散列密码并将其存储在数据库中的功能。 我正在尝试在PHP 5.5中使用password_hash函数,但它给了我奇怪的结果。
function hashpass($password)
{
include("includes/config.php");
$password = password_hash($password, PASSWORD_DEFAULT);
return $password;
}
然后,我以相同的静态密码输出结果,该静态密码只是我正在测试的“ testpassword”,并且不断给我不同的哈希值。 这是为什么? 如果继续这样做,我将永远无法验证密码,因为它将永远不会为完全相同的字符串产生相同的哈希值。
为了使此功能正常工作,我需要进行一些配置或设置吗?
当您使用password_hash对password_hash
进行哈希处理时,会生成一个随机的盐 ,该盐将用于哈希处理过程中,并放在结果的前面。 正是为了避免每次使用相同的密码而导致相同的哈希值。 避免容易生成彩虹表。 (所有条款,您都应该使用Google。:)
要验证生成的哈希password_hash
你需要使用password_verify
,它使用嵌入在哈希重现从另一个明文密码比较散盐。
password_hash
(和大多数好的密码哈希算法)生成的哈希值被加盐。 这意味着在散列之前(有时是散列期间)会向每个密码添加额外的一组随机数据 。
密码哈希的常见格式是##xxxxxxOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
,其中:
##
是哈希算法标识符, xxxxxx
是盐,并且 OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
是哈希密码。 在将存储的哈希与给定的明文密码进行比较时,该算法将采用哈希的##xxxxxx
部分,并使用它来计算新的密码哈希(例如##xxxxxxNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
)。 他们将两个哈希值进行比较,如果它们相等,则可以假设给定的明文密码与初始密码相同。
因为这与静态哈希不同,所以您必须使用password_hash
最初在注册或更改密码时对password_hash
进行哈希处理,并使用password_verify
检查给定的密码是否正确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.