我使用 itertools 生成所有组合或可打印的 ascii 字符:
for combo in product('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;?@[\\]^_`{|}~ \t\n\r\x0b\x0c', repeat=10):
但是,脚本被中断了,但我得到了最后一个序列字符串。有没有办法使用这个字符串作为起始序列来继续生成值?谢谢。
UPD:我试图通过暴力破解 XOR 密文来解决一些 CTF 任务。 Xortool 的输出:
2: 11.2%
5: 15.6%
7: 11.2%
10: 18.4%
15: 9.6%
18: 6.6%
20: 12.1%
25: 5.8%
30: 5.5%
40: 4.0%
我现在看不到其他解决方案,至少会尝试 bf 5 字节 key 。
请您参考如下方法:
假设处理的最后一个字符串以字符 '5' 开头。然后你可以忽略所有以前面字符开头的字符串,并像这样设置迭代:
for start in ('567...'):
for subcombo in product('01234567...', repeat=9):
yield (start,) + subcombo
但是你真的无法通过这个搜索空间。很容易计算组合总数:
>>> len('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;?@[\\]^_`{|}~ \t\n\r\x0b\x0c') ** 10
73742412689492826049L
即使您每秒可以处理十亿个组合,您也不会在一年内接近:
>>> 1000000000 * 60 * 60 * 24 * 365
31536000000000000
