当你知道答案是一个坐标时,是否可以破解SHA256?

问题描述:

我需要破解一个SHA256散列,我知道答案是坐标,但我不知道什么是坐标值 例如:当你知道答案是一个坐标时,是否可以破解SHA256?

3f1c756daec9ebced7ff403acb10430659c13b328c676c4510773dc315784e4e 
58.375782 26.742632 

是否有可能创建一个python脚本,使两个变量(都是00.000000),然后将它们添加到输出(例如:k=i+" "+j),然后将k转换为sha256,并将其与sha256进行比较,我试图破解。如果它不等于sha256被破解,那么它会添加i值(i=i+00.000001)并重新调整。等等等等

+1

当然,你可以强制哈希。随着时间的推移..你只需要尝试10 ** 16个组合。 –

+0

你绝对可以自己写出Martijn的答案,你在你的问题中描述了算法。 – Keeler

+0

该坐标字符串不会产生该特定的散列摘要。什么是坐标输入字符串的* exact *格式?在我的回答中,我假设散列函数被输入“xx.xxxxxx yy.yyyyyyy”坐标;例如用0填充格式化为2.6位数的数字,以及两个坐标之间的空格。 –

生产00.00000099.999999之间的所有可能的坐标是很容易的:

from itertools import product 
import hashlib 

digits = '' 

for combo in product(digits, repeat=16): 
    coords = '{}.{} {}.{}'.format(
     ''.join(combo[:2]), ''.join(combo[2:8]), 
     ''.join(combo[8:10]), ''.join(combo[10:])) 
    hash = hashlib.sha256(coords).hexdigest() 
    if hash == '3f1c756daec9ebced7ff403acb10430659c13b328c676c4510773dc315784e4e': 
     print coords 
     break 

这会穷举所有10 ** 16(一个大数目)的组合。坐下来放松一下,这会需要一段时间。

+2

虽然“一段时间”比“比直到宇宙热死亡的时间更长”的时间要好得多。假设没有并行化,我的猜测大概是几年(最好三个月)。 – delnan

+1

也许你只能计算地球上的陆地面积的坐标,以消除不必要的计算。 – flyingfoxlee

+1

虽然他们似乎是全球定位坐标,所以范围可能是[-180 .. + 180],[-90 .. + 90] –

有关散列的常见说法之一是它们丢弃信息,因此它们不能被颠倒。有无限的消息具有相同的散列。你无法知道哪个给出相同散列的无限消息是正确的。

当然在实践中,暴力攻击通常是有效的 - 要么是因为你的搜索策略很可能首先找到真正的原始消息(大多数散列冲突的消息在某些微不足道的方面显然是错误的 - 例如错误的格式 - 不会因为这个而在搜索中出现),或者因为你的攻击无论如何都需要使用相同散列的不同消息。

就你的情况而言,你对消息的了解意味着消息中的信息比散列中的(显然)要少。当然,哈希不会创建新的信息,所以这意味着许多哈希不会出现在任何坐标字符串中。你有(很有可能产生好的散列算法)可能的散列和可能的消息之间的1:1关系。原则上,你有一个可以解密的加密形式的消息。

当然,很多人会称我为白痴。毕竟,你仍然需要为所有可能的消息找到所有的哈希值。这可能比一些人想象的要快,但距离微不足道还有很长的路要走。

已经指出根据你的坐标格式有10^16个可能的组合。需要检查的一点是,所有这些数字的所有值是否可能(以及同样可能)。在内部使用浮点运算应该不是问题 - 双精度浮点数不是8位小数,但53位尾数应该足以确保所有这些十进制数字都已完全使用。然而,可能值得检查的是,没有其他限制可以减少要检查的病例数 - 显而易见的是,如何测量这些统筹坐标的精度。

即使某些数字值的可能性低于其他数字,也就是说,通过先搜索检查更可能的值,将为饼干节省大量时间。