凯撒密码 - 输出错误

时间:2015-04-13 19:04:04

标签: python encryption caesar-cipher

问题是:

  

您的程序需要解码一个名为的加密文本文件   “encrypted.txt”。编写它的人使用了指定的密码   “key.txt”。此密钥文件类似于以下内容:

A    B
B    C
C    D
D    E
E    F
F    G
G    H
H    I
I    J
J    K
K    L
L    M
M    N
N    O
O    P
P    Q
Q    R
R    S
S    T
T    U
U    V
V    W
W    X
X    Y
Y    Z
Z    A
     

左列表示明文字母,右列表示右列   代表相应的密文。

     

您的程序应使用“key.txt”解码“encrypted.txt”文件   并将明文写入“decrypted.txt”。

我有:

decrypt = ""
keyfile = open("key.txt", "r")
cipher = {}

for keyline in keyfile:
    cipher[keyline.split()[0]] = keyline.split()[1]
keyfile.close()
encrypt = []
encryptedfile = open("encrypted.txt", "r")
readlines = encryptedfile.readlines()
str = ""

for line in readlines:
    str = line
    letter = list(str)
    for i in range(len(letter)):
        if letter[i]==",":
            decrypt += ","
        elif letter[i] == ".":
            decrypt+= "."
        elif letter[i] == "!":
            decrypt += "!"
        elif letter[i] == " ":
            decrypt += " "
        else:
            found = False
            count = 0

while (found == False):
    if (letter[i] == keyline.split()[0][count]):
        decrypt += keyline.split()[1][count]
        found = True
        count += 1
        print decrypt

encryptedfile.close()
decryptedfile = open("decrypted.txt", "w")
decryptedfile.write(decrypt)
decryptedfile.close()

这是Python语言。输出确实生成一个名为decrypted.txt的文件,但文件中唯一的东西是A,这对我来说没有意义。对于这个问题,它应该输出更多的权利吗?

2 个答案:

答案 0 :(得分:1)

使用enrcypted.txt中给出的密钥解冻文件key.txt并将结果保存到decrypted.txt

with open('key.txt', 'r') as keyfile:                                           
    pairs = [line.split() for line in keyfile]                                  
    columns = [''.join(x) for x in zip(*pairs)]                                 
    # Or to make it work with lower case letters as well:                       
    # columns = [''.join(x)+''.join(x).lower() for x in zip(*pairs)]            
    key = str.maketrans(                                                        
            *reversed(columns)                                                  
            )                                                                   

with open('encrypted.txt', 'r') as encrypted_file:                              
    decrypted = [line.translate(key) for line in encrypted_file]                

with open('decrypted.txt', 'w') as decrypted_file:
    decrypted_file.writelines(decrypted) 

答案 1 :(得分:0)

你的while块应该缩进三次 除了count + = 1,它应该比其邻居小一个块

while块的内部并没有使用keyline是字典的事实。