使用于搜索字典的python代码更有效(vigenere cipher)

2024-05-03 19:18:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一些代码来检查vigenere密码的不同可能性,然后让它只添加列表到可能的选项,这些选项在解密时会产生一个单词(这样我就不会得到成千上万的打印输出,我只知道最可能的可能性)。你知道吗

这是目前为止的密码

def vigenere(input):
    print("VIGENERE")
    key = ""
    keyList = []
    textList = []
    for word in englishDictionary:
        key = re.sub('[\W_]+', '', word)
        if key[:len(input)] not in keyList:
            while len(key) < len(input):
                key = key + key
            keyLetters = list(key.upper())
            keyNumbers = []

            for x in keyLetters:
                keyNumbers.append(alphaNum.get(x))
            vigenereOutput = ""

            for z in list(input):
                try:
                    keyNum = int(keyNumbers[0])
                except IndexError:
                    pass
                keyNum = keyNum - 1
                inbetween = int(alphaNum.get(z)) - keyNum
                del keyNumbers[0]

                if inbetween < 1:
                    inbetween = 26 + inbetween
                vigenereOutput = vigenereOutput +    numAlpha.get(str(inbetween))

            if vigenereOutput in englishDictionary:
                keyList.append(key[:len(input)])
                textList.append(vigenereOutput)
    if len(keyList) > 0:
        for keyEntry in len(keyList):
            print("Key:", keyList[keyEntry])
            print("Text:", textList[keyEntry])
    print()

englishDictionary是我字典文本文件中所有单词的列表(相当大的文件,但使用一个小文件会破坏这个解码器的功能)

然而,现在翻阅整本词典需要20多分钟。。。如何加快这个过程?你知道吗


Tags: keyinforinputlenifprintappend