繁体   English   中英

PHP 5.5中的password_hash函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM