Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python实现简单对称加密_Python_Python 3.x_Encryption_Cryptography - Fatal编程技术网

用Python实现简单对称加密

用Python实现简单对称加密,python,python-3.x,encryption,cryptography,Python,Python 3.x,Encryption,Cryptography,我想通过使用echaracters中的字符更改每个字母来加密一些字母,该字符与characters中的字母具有相同的索引。 因此,我尝试使用zip()迭代这两个列表。 首先,我迭代了userInput,在同一个循环中,我迭代了key(这是zip(characters,echaracters)) 然后我检查I是否等于a,如果条件为True我将b添加到密码中 userInput = input("Enter: ") characters = ["A", &q

我想通过使用
echaracters
中的字符更改每个字母来加密一些字母,该字符与
characters
中的字母具有相同的索引。 因此,我尝试使用
zip()
迭代这两个列表。 首先,我迭代了
userInput
,在同一个循环中,我迭代了
key
(这是
zip(characters,echaracters)
) 然后我检查
I
是否等于
a
,如果条件为
True
我将
b
添加到
密码中

userInput = input("Enter: ")

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

echaracters = ["@", "$", "(", "]", "=", ")", "&", "#", "!", "%", "~", "[", "/", ";", "*", "}", "9", "?", "5", "1", "_", ">", "<<", "+", ",", "-"]

key = zip(characters, echaracters)

cipher = ""

for i in userInput:
    for a, b in key:
        if i == a:
            cipher += b

print(cipher)
我不明白为什么它只返回第一个符号
期望输出

Enter: ABC
@$(

我做错了什么?

您的
键在第一次循环通过后变为空

您可以尝试以下方法:

key=list(zip(characters, echaracters))
for i in userInput:
    for a, b in key:        
        if i == a:            
            cipher += b

原因是因为'key'是一个zip类型,在第一次迭代后会丢失它的值,因为zip类型是一个迭代器。这是一个类似的问题。 你的代码有点复杂。有更简单的方法来完成你的任务

userInput=input(“输入:”)
字符=[“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”、“I”、“J”、“K”、“L”、“M”、“N”、“O”、“P”、“Q”、“R”、“S”、“T”、“U”、“V”、“W”、“X”、“Y”、“Z”]
echaracters=[“@”、“$”、“(”、“]”、“=”、“&”、“#”、“!”、“%”、“~”、“[”、“/”、“;”、“*”、“}”、“9”、“?”、“5”、“1”、“#”、“>、”
你可以用

from string import ascii_uppercase

print(ascii_uppercase) # example zip(ascii_uppercase, echaracters)

# ABCDEFGHIJKLMNOPQRSTUVWXYZ

这个。或者你可以把key列成一个列表
key=list(zip(characters,echaracters))
来防止这种行为。我同意,巧合的是,我已经在回答中添加了这个)谢谢你的回答谢谢你,伙计。这很有帮助
SYBMOLS = {
    "A": "@",
    "B": "$",
    "C": "(",
    "D": "]",
    "E": "=",
    "F": ")",
    "G": "&",
    "H": "#",
    "I": "!",
    "J": "%",
    "K": "~",
    "L": "[",
    "M": "/",
    "N": ";",
    "O": "*",
    "P": "}",
    "Q": "9",
    "R": "?",
    "S": "5",
    "T": "1",
    "U": "_",
    "V": ">",
    "W": "<<",
    "X": "+",
    "Y": ",",
    "Z": "-",
}

userInput = input("Enter: ")

for symbol in userInput:
    print(SYBMOLS[symbol], end="")


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

from string import ascii_uppercase

print(ascii_uppercase) # example zip(ascii_uppercase, echaracters)

# ABCDEFGHIJKLMNOPQRSTUVWXYZ