好吧,伙计们,基本上我有这个代码:
$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哈希,我不知道,这就是我必须弄清楚的。即使是通过蛮力方法。
答案 0 :(得分:1)
散列是将字符串单向转换为通常较短的固定长度值或表示原始字符串的键。
SHA(安全散列算法)是许多加密散列函数之一。加密哈希就像文本或数据文件的签名。 SHA-256算法生成几乎唯一的固定大小的256位(32字节)哈希。
SHA-256是SHA-1的后继哈希函数之一,也是最强大的哈希函数之一。
每个哈希都无法通过计算恢复,但你可以在强力哈希明文之间进行映射,如
a -> ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb
b -> 3e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d
.
.
如果您遇到相同的散列数据,则表示您知道明文。 通常,人们生成明文和散列文本的地图,然后他们使用数据库查找。
因此,这个website提供了一个大的哈希数据库,您可以尝试将其还原。
虽然,你可以使用这种方法来恢复散列,但没有人拥有所有可能的单词hasing database。它只包含字典上的单词或密码中常用的单词。
有关详细信息,您可以使用以下关键字:" rainbow table"," hashing" ,"反向散列查找","加密散列函数"
答案 1 :(得分:1)
SHA-256的设计使得通过查看输出无法找到原始值。对于短密码,进行暴力攻击是可行的,只需尝试任何组合,直到找到匹配为止。
在您的情况下,您需要查找的$code
是一个64个字符的字符串,看起来像一个随机32字节键的十六进制表示。使用32字节的信息,您可以描述1E77组合,因此对于15 Giga SHA256/second,您仍然需要大约1E58年的暴力。
因此,除非您能找到关于密钥的其他信息(例如某个方案),否则无法获取代码。然而,这个例子是一个随机数生成器的糟糕实现,从操作系统的随机源读取一个字节会更安全,更便宜。
答案 2 :(得分:0)
sha256哈希是单向的,无法逆转!
因此,除非使用强力方法,否则无法获取代码。