凯撒密码蛮力解密

时间:2013-10-28 14:40:08

标签: python for-loop python-3.x encryption

我正在尝试编写自己的python代码以强制使用caesar密码,我需要一些帮助。我在函数代码的末尾附近特别需要帮助。我想知道如何专门打印,以便在每个键尝试后有一个间隙。我使用python 3.3并且刚刚开始编码3周前。

print ("The plaintext will be stripped of any formatting such as spaces.")
freqlist = []
maxkey = 26
if key > maxkey:
    raise Exception("Enter a key between 0 and 26: ")
elif key < 0:
    raise Exception("Enter a key between 0 and 26: ")
freq = []
inpt=input("Please enter the cipher text:")
inpt = inpt.upper()
inpt = inpt.replace(" ", "")
inpt = inpt.replace(",", "")
inpt = inpt.replace(".", "")
for i in range(0,27):
       key = i

def decrypt():
    for i in range(0,27):
        for a in inpt:
            b=ord(a)
            b-= i
            if b > ord("Z"):
                b -= 26
            elif b < ord("A"):
                b+=26
            freqlist.append(b)
        for a in freqlist:
           d=chr(a)
           freq.append(d)
           freq="".join(freq)
           print(freq.lower(),"\n")
decrypt()

我正在尝试使用for循环,我不认为它真的有效。

1 个答案:

答案 0 :(得分:2)

根据您发布的错误,我认为这应该会有所帮助。

在Python中,您可以使用同名的本地和全局变量。函数中的freq是本地的,因此全局freq的初始化不会触及本地freq。要使用全局decrypt,您必须通过global statement告诉函数执行此操作。 Python FAQs中对此进行了解释。

这应该足以让你回到正轨。

修改 以下是def decrypt(): # we don't need the zero start value, that's the default # test all possible shifts for i in range(27): # initialize the array freqlist = [] # shift all the letters in the input for a in inpt: b = ord(a) b -= i if b > ord("Z"): b -= 26 elif b < ord("A"): b+=26 freqlist.append(b) # now put the shifted letters back together shifted = "" for a in freqlist: d = chr(a) # append the shifted letter onto our output shifted += d # after we put the decrypted string back together, print it # note this is outside the letter loops, # but still inside the possible shifts loop # thus printing all possible shifts for the given message print(d) 功能的修改,以及对更改的一些解释

{{1}}