我需要破解sha256哈希,我知道答案是坐标,但我不知道坐标值是多少 例如:
3f1c756daec9ebced7ff403acb10430659c13b328c676c4510773dc315784e4e
58.375782 26.742632
是否可以创建一个生成两个变量(值均为00.000000)的python脚本,然后将它们添加到gheter(例如:k=i+" "+j
),然后将k转换为sha256并将其与sha256进行比较,I我试图破解。如果它不等于sha256被破解,那么它会再次添加i
一个值(i=i+00.000001
)和triess。等等
答案 0 :(得分:8)
在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秒(4s除以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 <强>年的计算工作。即使能够运行2万个并行流程也不会将其减少到合理的数量(仍然是大约13。5年的工作时间)。
Python对于这项任务来说还不够快。使用GPU应该可以达到500 million hashes per second (0.5 Gigahash / s),此时您可以运行上述强力操作并在这样的系统上在大约230天内找到解决方案。当然,需要付出代价,因为这样的钻井平台每月运行成本约为3000至4000美元!但是有了足够的专用硬件,你肯定可以在“人性化”时间线上“破解”哈希。
答案 1 :(得分:2)
关于哈希的一个普遍主张是它们丢弃信息,因此它们无法逆转。那些具有相同哈希值的无限消息。您无法知道提供相同哈希的哪些无限消息是正确的。
当然,在实践中,暴力攻击通常会起作用 - 要么是因为您的搜索策略可能首先找到真正的原始消息(大多数带有哈希冲突的消息显然是错误的,例如错误的格式 - 并赢得& #39; t因此而在搜索中出现)或者因为你的攻击需要使用相同哈希的不同消息。
在您的情况下,您对该消息的了解意味着消息中的信息少于(显然)散列中的信息。当然,散列不会创建新信息,因此这意味着任何坐标字符串都不会出现许多散列。您(很有可能获得良好的哈希算法)可能的哈希值与可能的消息之间存在1:1的关系。原则上,您有一个加密的邮件形式,可以解密。
当然,很多人会称我为白痴。毕竟,您仍然需要找到所有可能消息的所有哈希值。这可能比某些人想象的要快,但距离琐碎还有很长的路要走。
已经指出,根据您的坐标格式,有10 ^ 16种可能的组合。要检查的一件事是所有这些数字的所有值都是可能的(同样可能)。在内部使用浮点运算不应该是一个问题 - 双精度浮点数不是8位小数,但53位尾数应该足以确保所有这些十进制数字完全被使用。但是,值得检查的是,没有其他限制可以减少要检查的案件数量 - 显而易见的是这些坐标的测量精度。
即使某些数字值比其他数字值更不可能,这意味着命令搜索更多可能的值,以便为破解者节省大量时间。