我需要破解一个sha256散列,我知道答案在坐标中,但我不知道坐标值是多少 示例:
3f1c756daec9ebced7ff403acb10430659c13b328c676c4510773dc315784e4e
58.375782 26.742632
是否可以创建一个python脚本来生成两个变量(都有值00.000000),然后将它们添加到heter中(例如:k=i+" "+j
),然后将k转换为sha256并将其与sha256进行比较,我正在尝试破解。如果它不等于sha256被破解,那么它会添加i
一个值(i=i+00.000001
),然后再次尝试。等等等等
在
00.000000
和99.999999
之间生成所有可能的坐标非常简单:这将强制所有10*16(一个大数字)的组合。坐下来放松,这需要一段时间。
我们说的“一段时间”,其实是指在你的有生之年,或者其他人的生命中。只要遍历由
product()
产生的所有可能的组合就需要花费大量的时间,因为每个要尝试添加的数字都会将所需时间增加10倍:如果生成8位数字的所有可能组合需要0.8秒(4s除以5次重复),9位数字需要8秒,你可以推断出10位数字几乎需要1.5分钟,等等。生成16位数字的所有可能组合需要100万(10**6)倍于10位数字的时间,所以963天或者3年后运行一个循环。您可以将此任务拆分为大量计算机上的2000个不同进程,这些计算机总共有足够的内核来并行运行这些进程,从而将此时间减少到12小时以下。
那么循环体本身每百万次迭代大约需要2.4秒:
但你的工作量比那多了10**10(10000万)倍,总共大约有743年的计算工作量。即使能够运行2万个并行进程也不能将其减少到一个合理的数字(这仍然是大约13.5年的工作)。
Python还不够快。使用gpu应该可以到达500 million hashes per second (0.5 Gigahash / s),此时您可以运行上述暴力操作,并在大约230天内在这样的系统上找到解决方案。当然是要付出代价的,因为这样的钻井平台一个月的运行费用大约在3000-4000美元之间!但有了足够的专用硬件,你当然可以“破解”在“人道”时间表的杂凑。
关于散列的一个常见说法是,散列丢弃信息,因此它们不能被逆转。有无限的消息具有相同的哈希值。您不知道提供相同哈希值的无限消息中的哪一个是正确的。
当然在实践中,暴力攻击经常奏效,要么是因为你的搜索策略可能首先找到真正的原始消息(大多数具有哈希冲突的消息显然在某些琐碎的方面是错误的,例如错误的格式,并且不会因此出现在搜索中),要么是因为你的攻击无论如何都需要具有相同哈希的不同消息。
在您的例子中,您对消息的了解意味着消息中的信息比(显然)散列中的信息少。当然散列不会产生新的信息,所以这意味着不能对任何协调字符串进行许多散列。在可能的散列和可能的消息之间,有一个1:1的关系(对于好的散列算法来说概率非常高)。原则上,您的消息有一个加密形式,可以解密。
当然,很多人会说我是个白痴。毕竟,您仍然需要找到所有可能消息的所有散列。这可能比一些人想象的要快,但离琐事还有很长的路要走。
已经指出,根据坐标格式,有10^16种可能的组合。要检查的一件事是,是否所有这些数字的所有值都是可能的(并且同样可能)。在内部使用浮点运算不成问题-双精度浮点不是8位小数,但53位尾数应该足够确保所有这些小数都能充分使用。然而,值得一提的是,没有其他限制可以减少要检查的案例数量——最明显的一个限制是如何测量这些坐标的精度。
即使某些数字值的可能性比其他数字值小,这意味着命令搜索首先检查更可能的值将为破解者节省大量时间。
相关问题 更多 >
编程相关推荐