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

jos*_*osh 4 python cracking sha256 coordinates

我需要破解sha256哈希,我知道答案是坐标,但我不知道坐标值的例子是什么:

3f1c756daec9ebced7ff403acb10430659c13b328c676c4510773dc315784e4e
58.375782 26.742632
Run Code Online (Sandbox Code Playgroud)

是否有可能创建一个python脚本,使两个变量(值均为00.000000),然后将它们添加到togheter(例如:) k=i+" "+j,然后将k转换为sha256并将其与sha256进行比较,我试图破解.如果它不等于sha256被破解,那么它再次添加i一个值(i=i+00.000001)和triess.等等等等

Mar*_*ers 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
Run Code Online (Sandbox Code Playgroud)

这种蛮力全部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
Run Code Online (Sandbox Code Playgroud)

如果产生所有可能的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
Run Code Online (Sandbox Code Playgroud)

但你的工作时间比10**10(10亿)多,总计大约743 的计算工作.即使能够运行2万个并行流程也不会将其减少到合理的数量(这仍然是大约13.5年的工作).

Python对于这项任务来说还不够快.使用GPU应该可以达到每秒5亿个哈希值(0.5千兆赫/秒),此时你可以在这样的系统上运行上述暴力操作并在大约230天内找到解决方案.当然,需要付出代价,因为这样的钻井平台每月运行成本约为3000至4000美元!但是有了足够的专用硬件,你肯定可以在"人性化"的时间线上"破解"哈希.

  • 虽然"一段时间"比"比宇宙热死之前的时间更长"要好得多.假设没有并行化,我的猜测大约是几年(最多三个月). (2认同)