我需要破解sha256散列,我知道答案在坐标中,但我不知道坐标值示例是什么:
3f1c756daec9ebced7ff403acb10430659c13b328c676c4510773dc315784e4e
58.375782 26.742632
有没有可能创建一个python脚本,使两个变量(都是值00.000000),然后将它们相加到togheter (例如:k=i+" "+j
),然后将k转换为sha256并将其与sha256进行比较,这是我正在尝试破解的。如果它不等于被破解的sha256,那么它添加i
一个值(i=i+00.000001
)并再次尝试。以此类推
发布于 2014-01-19 20:08:27
在00.000000
和99.999999
之间生成所有可能的坐标非常简单:
from itertools import product
import hashlib
digits = '0123456789'
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 (一个很大的数字)组合。坐好放松点,这会花点时间的。
说到“一段时间”,我们真的不是指在你的有生之年,或者其他任何人的有生之年。仅仅是迭代product()
产生的所有可能的组合就需要大量的时间,因为每增加一个数字来尝试就会增加10倍的时间:
>>> from collections import deque
>>> from itertools import product
>>> from timeit import timeit
>>> digits = '0123456789'
>>> timeit(lambda: deque(product(digits, repeat=8), 0), number=5)
3.014396679995116
>>> timeit(lambda: deque(product(digits, repeat=9), 0), number=5)
30.99540744899423
如果产生所有可能的8位数字组合需要.8秒(4除以5次重复),9位数字需要8秒,你可以由此推断出10位数字几乎需要1.5分钟,以此类推。仅产生所有可能的16位数字组合需要100万(10 ** 6)倍于10位数字的时间,所以963天或大约3年来运行这些循环。您可以将此任务分配到大量计算机上的2000个不同进程中,这些计算机总共有足够的内核来并行运行这些进程,从而将时间减少到12小时以下。
那么循环体本身每百万次迭代大约需要2.4秒:
>>> from random import choice
>>> combo = tuple(choice(digits) for _ in range(16)) # random combination for testing
>>> timeit("""\
... coords = '{}.{} {}.{}'.format(
... ''.join(combo[:2]), ''.join(combo[2:8]),
... ''.join(combo[8:10]), ''.join(combo[10:]))
... hash = hashlib.sha256(coords).hexdigest()
... if hash == '3f1c756daec9ebced7ff403acb10430659c13b328c676c4510773dc315784e4e': pass
... """, 'from __main__ import combo; import hashlib')
2.3429908752441406
但是你有10 ** 10 (10万亿)次以上的工作,总计大约743 年的计算工作。即使能够运行20,000个并行进程,也不会将其减少到一个合理的数字(这仍然是13.5年的工作)。
对于这个任务,Python的速度还不够快。使用GPU应该可以达到500 million hashes per second (0.5 Gigahash / s),此时您可以在这样的系统上运行上面的暴力操作并在大约230天内找到解决方案。当然,这是有代价的,因为这样的钻机每个月的运行成本约为3000-4000美元!但有了足够的专用硬件,你肯定可以在“人性化”的时间线上“破解”哈希。
发布于 2014-01-19 20:36:18
关于哈希的一个常见说法是,它们丢弃了信息,因此它们是不可逆的。有无数条消息具有相同的哈希值。你不能知道给出相同散列的无限消息中哪条是正确的。
当然,在实践中,暴力攻击通常是有效的--要么是因为你的搜索策略很可能首先找到真正的原始邮件(大多数有散列冲突的邮件显然在一些微不足道的方面是错误的--例如错误的格式--因此不会出现在搜索中),要么是因为你的攻击无论如何都需要一个具有相同散列的不同邮件。
在您的例子中,您对消息的了解意味着消息中的信息少于(显然)散列中的信息。当然,散列不会创建新的信息,因此这意味着任何坐标字符串都不会出现许多散列。您在可能的散列和可能的消息之间存在1:1的关系(对于好的散列算法来说,概率非常高)。原则上,你的消息有一种加密的形式,可以解密。
当然,很多人会因为我说了这句话而叫我笨蛋。毕竟,您仍然需要找到所有可能消息的所有散列。这可能比一些人认为的要快,但它离琐碎还有很长的路要走。
已经指出,根据您的坐标格式,有10^16种可能的组合。要检查的一件事是,所有这些数字的所有值是否都是可能的(并且概率相等)。在内部使用浮点运算应该不是问题-双精度浮点数不是8位小数,但53位的尾数应该足够确保所有这些小数位都被充分使用。然而,可能值得检查的是,没有其他限制可以减少要检查的案例数量-最明显的一个限制是如何测量这些坐标的精度。
即使某些数字值的概率比其他值小,这意味着命令搜索首先检查更可能的值将为黑客节省大量时间。
https://stackoverflow.com/questions/21216504
复制相似问题