【问题标题】:Hashing function giving different hashes everytime? [duplicate]哈希函数每次都给出不同的哈希值? [复制]
【发布时间】:2020-07-18 19:48:42
【问题描述】:

根据研究,我的印象是,当用相同的函数对字符串进行哈希处理时,它总是会返回相同的哈希值。我正在运行一个程序并使用 php 中的 password_hash() 函数进行哈希,但结果我不断得到不同的哈希,因此,当我比较它们时,它不起作用。

这是我正在处理的示例。

要散列的 PIN:1212

Initial Hash是第1行,其他3个是以下尝试:

$2y$10$5CAoU8snW79.8WpCS3T0Y.6OT4YkSYIlS2LrII8DweMzjTV5JGh2Cnone
$2y$10$SZgvvB7WG.gXB/AUbWeIOO8HnBit6F7fG.My/Pcyi4D0zXgb3/n3G
$2y$10$9b.WTA3r4ZYMHdtGN28.Je1qJ4R3n.1Mac1hD3kl.NleiCPmuZRianone
$2y$10$VEuLdnKUYftcJFtbY2KqJOJLQ4B/spuhRk6zywyTzjko7y4aZBGWunone 

我正在使用的函数看起来像这样,并且在3个不同的地方使用,但我认为这不会影响结果。

        $pin = password_hash($_POST['pin'],PASSWORD_DEFAULT);

【问题讨论】:

  • 不 - 你的权利。 假定每次都返回不同的哈希值,因为该函数使用随机盐。您应该使用password_verify() 将未经编辑的密码与哈希值进行比较。 I explain all of this here
  • 好的,我去看看。您知道验证函数将如何处理发生在与需要进行验证的地方不同的 php 文件中的散列吗?
  • 阅读 stackoverflow.com/questions/30279321/… 以了解其工作原理。
  • 是 - 使用 password_hash() 存储哈希密码,然后在需要验证时检索哈希。
  • 好的,我相信这很容易,但这让我很困惑。登录的工作方式是,用户只输入一个 PIN 码。没有用户名或其他任何东西。鉴于此,我如何识别需要提取的哈希?

标签: php encryption hash hashcode


【解决方案1】:

password_hash() 不仅对密码进行哈希处理,还对其进行加盐处理。盐存储在字符串中。如果您在散列上使用password_verify(),它们都会使用输入进行检查。如果每个输入都给出相同的字符串,黑客可以根据已知哈希的数据库检查受损字符串以找到密码。

【讨论】:

  • 您知道 password_verify() 函数如何处理发生在单独文件中的散列而不是验证吗?
  • 它也可以。验证哈希所需的所有信息都存在于字符串中。 hash 和 verify 可以在不同的机器上运行,它仍然可以工作。
猜你喜欢
  • 2017-11-23
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 2020-08-17
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多