好吧,我知道这听起来很糟糕,就像我要把它用于不道德的事情一样,但我向您保证我不会。
我正在为我的计算机和信息安全类(class)写一篇论文,我选择的主题是哈希方法。我在论文中提到的一个要点是 MD5 只是单向的,破解 MD5 哈希的唯一方法是连续生成字符串并使用 MD5 函数,然后将它与你想要破解的哈希进行比较。
我想构建一个非常简单的模型程序来展示我的论文(我们做了一个演示,这将是一件很棒的事情),所以我想制定一个算法来制作一个字符串可能的字符组合最多 8 个字符。例如输出将是:
a, b, c, ..., aa, ab, ac, ... ba, bb, bc 等等等等
如果可能,它需要包含字母、数字和符号。
我部分通过了算法,但遗憾的是我的编程技能无法胜任这项任务。如果有人能为此提供完整的算法,我将非常感激。
再次声明,如果您认为我是个骗子并且我打算将此用于黑客目的,您不必留下答案。
谢谢。 :)
最佳答案
在 Python 中,itertools.product几乎可以满足您的所有需求——尽管它只执行一个“重复次数”,因此您必须从 1 迭代到 8(不难;-)。本质上:
import itertools
import string
# whatever you wish as alphabet (lower/upper, digits, punct, &c)
myalphabet = string.ascii_lowercase + string.ascii_digits
def prods(maxlen, alphabet=myalphabet):
for i in range(1, maxlen+1):
for s in itertools.product(alphabet, repeat=i):
yield ''.join(s)
当然,对于长度为 N 和 K 次重复(在您的情况下为 8 次)的字母表,这确实会产生 N + N^2 + ... + N^K 种可能性(N=36 和 K=8 时有 2,901,713,047,668 种可能性) , 但是, friend 之间几万亿输出算什么!-)
关于生成巨大词表的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1656334/