我能根据sha256哈希产生的结果找到它吗


Can I find a sha256 hash based on results it produces?

好吧,伙计们,基本上我有这个代码:

$code ="39b7d32fcb743c244c569a56d6de4dc27577d6277d6cf155bdcba6d05befcb34";
$code2 = "9999999";
$code3 = "56985";
$hash = hash("sha256",$code."-".$code2."-".$code3);
$result = hexdec(substr($hash,0,8)) % 15;
echo $result;

这是一个从0到14的随机数生成器。code3变量是唯一一个不断变化的变量(当然还有结果),其他变量都是静态值。在生成每个数字之后,code3的值增加1。问题是,我没有$code值,至少目前没有,它会定期更改,当它更改时,会显示以前的代码。我的任务是在代码值更改之前找到它,它看起来像一个sha256散列(如果我错了,请纠正我)。当前的$code值是我唯一没有的,所以我的问题是:我是否有可能根据最近10个左右的结果找到它,就像一个哈希破解代码,比较结果并给我可能的一个或多个哈希?如果是,我从哪里开始?谢谢

编辑:我不需要解密或反转哈希,我只需要找到它的原样。$code变量是一个sha256哈希,我不知道,这就是我必须弄清楚的。即使是通过暴力手段。

哈希是将字符串单向转换为通常较短的固定长度值或表示原始字符串的键。

SHA(安全哈希算法)是许多加密哈希函数之一。加密散列类似于文本或数据文件的签名。SHA-256算法生成一个几乎唯一的、固定大小的256位(32字节)散列。

SHA-256是SHA-1的后续散列函数之一,也是可用的最强散列函数之一。

每个哈希都不能通过计算恢复,但你可以在像这样的强力哈希明文之间进行映射

a -> ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb
b -> 3e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d
.
.

如果您遇到相同的哈希数据,则意味着您知道明文。通常,人们生成明文和散列文本的映射,然后使用数据库查找。

所以,这个网站提供了大的哈希数据库,你可以尝试恢复它。尽管可以使用此方法恢复哈希,但并没有人拥有所有可能的单词哈希数据库。它只包含字典中的单词或密码中常用的单词

有关更多信息,您可以使用以下关键字:"彩虹表"、"哈希"、"反向哈希查找"、"加密哈希函数"

SHA-256的设计目的是使其无法通过查看输出来找到原始值。对于短密码,可以进行蛮力攻击,然后尝试任何组合,直到找到匹配的密码。

在您的情况下,您需要查找的$code是一个64个字符的字符串,它看起来像是随机32字节密钥的十六进制表示。有了32字节的信息,你可以描述大约1E77的组合,所以有了15千兆SHA256/秒,你仍然需要大约1E58年的时间才能使用暴力。

因此,除非你能找到有关密钥的其他信息(例如某个方案),否则不可能获得代码。尽管如此,这个例子是随机数生成器的一个糟糕实现,从操作系统的随机源读取一个字节会更安全、更便宜。

sha256哈希是单向的,不能反转!

因此,除非使用暴力方法,否则不可能取回代码。