我已经使用PHP hash_pbkdf2函数对字符串进行了加密。请查看以下代码:
$password = "password";
$iterations = 10000;
$salt = 1111;
$hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 20);
The result of hash value "61ea90120ac05230465c"
所有加密工作正常。
请让我知道如何减少值“ 61ea90120ac05230465c”并获得“密码”的结果
答案 0 :(得分:2)
简短的回答:您不能。我可以推荐this approach instead吗?
更长的答案(摘录自this article,向开发人员解释了加密术语)
许多开发人员认为应该对密码进行加密,但这是错误的。 密码应该散列 ,而不是加密的。此外,不要将密码哈希算法与简单的密码哈希函数混淆。他们不是同一回事:
与密码哈希不同,密码哈希需要多个输入参数。但是与加密算法不同,密码哈希是一种确定性的陷阱门计算。与密钥加密不同的是,salt不需要保持秘密。每个用户只需要唯一即可。每位用户使用唯一盐的目的是阻止预计算,并使从哈希列表中进行暴力猜测的密码更昂贵。
函数hash_pbkdf2()
是一种哈希函数,因此you cannot decrypt it。
此外,它使用的算法的名称为PBKDF2,或称为 P 密码- B 已定义 K ey D eriving F 功能# 2 。它旨在将密码(来自人的低熵且易于记忆的输入)转换为安全的加密密钥。这样做的方式导致许多人使用PBKDF2作为密码哈希。
尽管KDF和密码哈希算法之间存在一些关键区别,但出于 this 答案的考虑,它们实际上是同一类型的算法。
那么“如何[解密]此PBKDF2输出的答案”?是:您不能。
哈希函数是单向的。有无限的输入可以产生任何给定的哈希输出,但是由于输出键空间具有安全的哈希函数如此之大,因此生成冲突在计算上是不可行的。
密码散列函数(和密钥派生函数)也是如此,但加剧了:
解决方案是使用正确的工具完成工作。如果您不知道这是什么,请start here,以便您了解术语,然后see this answer for example code。