【问题标题】:How to get php hash_pbkdf2 decrepit value如何获取 php hash_pbkdf2 破旧值
【发布时间】:2019-02-21 07:19:33
【问题描述】:

我已经使用 PHP hash_pbkdf2 函数加密了字符串。请查看以下代码:

$password = "password";
$iterations = 10000;
$salt = 1111;

$hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 20);


The result of hash value "61ea90120ac05230465c"

在加密中一切正常。

请告诉我如何将“61ea90120ac05230465c”的值衰减并得到“密码”的结果

【问题讨论】:

  • 哈希函数无法解密。这是一种方式功能。如果您需要加密和解密,则使用 A3(加密密码),但这对密码来说是不好的方式
  • 如果您认为可以轻松“解密”此哈希 - 为什么要使用它?

标签: php security cryptography password-hash pbkdf2


【解决方案1】:

简短的回答:你不能。我可以推荐this approach instead吗?


更长的答案(摘自this article,它向开发人员解释了密码学术语):

许多开发人员认为密码应该加密,但这是错误的。 密码应散列,而不是加密。此外,不要将密码散列算法与简单的加密散列函数混淆。它们不是一回事:

与密码散列不同,密码散列需要多个输入参数。但与加密算法不同,密码哈希是单向确定性陷阱门计算。同样与密钥加密不同,盐不需要保密;它只需要每个用户都是唯一的。每个用户唯一的盐的目的是阻止预计算并使从哈希列表中暴力猜测密码的成本更高。

函数hash_pbkdf2()是一种哈希函数,所以you cannot decrypt it

此外,它使用的算法名称是 PBKDF2,或 Password-Based Key D派生F函数#2。它旨在将密码(低熵的人类来源和人类记忆输入)转换为安全的加密密钥。它在后台执行此操作的方式导致很多人使用 PBKDF2 作为密码哈希。

虽然 KDF 和密码哈希算法之间存在一些关键差异,但为了这个答案,它们本质上是同一类型的算法

那么“如何[解密]这个 PBKDF2 输出?”的答案是什么?是:你不能。

哈希函数是单向的。有无限的输入可以产生任何给定的哈希输出,但由于输出密钥空间非常大,具有安全的哈希函数,因此在计算上不可能产生冲突。

密码散列函数(和密钥派生函数)也是如此,但以下情况会加剧:

  1. 加盐
  2. 迭代散列
  3. (在某些情况下)内存硬算法设计使使用并行处理难以执行brute force attack

解决方案是为工作使用正确的工具。如果你不知道那是什么,start here 这样你就明白了这些条款,然后see this answer for example code

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2014-04-15
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多