Python中的Caesar Cipher(意外错误)

时间:2017-09-25 18:58:32

标签: python encryption

我必须使用Caesar Cipher加密用户提供的纯文本。将每个明文字符转换为其ASCII(整数)值并存储在列表中。 我这样做了

print("This program uses a Caesar Cipher to encrypt a plaintext message using the encryption key you provide.")
plaintext = input("Enter the message to be encrypted:")
plaintext = plaintext.upper()
n = eval(input("Enter an integer for an encrytion key:"))
ascii_list = []

# encipher
ciphertext = ""
for x in range(len(plaintext)):
    ascii_list[x] = plaintext (ascii_list) + n %26
    print()

但错误如下所示:

   TypeError: 'str' object is not callable

我希望结果出来:

This program uses a Caesar Cipher to encrypt a plaintext message using the encryption key you provide.
Enter the message to be encrypted: Boiler Up Baby!
Enter an integer for an encrytion key: 1868
The fully encoded message is: CWOTFZ&]QCHICa'

我尝试了很多不同的方法但结果却没有出来。

1 个答案:

答案 0 :(得分:1)

您需要将初始字符解析为数字,将密钥添加到它们,然后将它们解析回字符。

在您的代码中ascii_list[x]必须更改为ascii_list.append(),因为您引用的是不存在的索引。此外,plaintext不是您可以调用的函数,它只是您的大写初始消息。

你可以这样做:

for x in range(len(plaintext)):
    ascii_list.append(chr(ord(plaintext[x]) + n))
print(ascii_list)

注意: 您提供的输入/输出(在:Boiler Up Baby!,out:CWOTFZ&]QCHICa')不是典型的凯撒密码,因为一些字母变成符号,并且符号也被编码。使用此解决方案只会向上移动密钥,这意味着例如Z永远不会变为A。如果您需要适当的Caesar密码解决方案,您可能需要查看以下问题:Caesar Cipher Function in Python