加密Python加密

时间:2019-01-02 22:19:18

标签: python python-3.x cryptography

我正在尝试创建一个程序,该程序生成对任何局外人来说看起来都是胡言乱语的编码消息。

我希望它允许使用任何旋转量对邮件进行加密。因此,用户将能够在终端中键入消息并指定旋转量(13、4、600等),程序将打印出结果加密的消息。

最终的交互式程序将按以下方式运行:

$ python caesar.py 输入消息: 你好,世界! 旋转方式: 5 Mjqqt,Btwqi!

我使用一些帮助程序功能将问题分解为可管理的步骤。

我尝试编写一个名为Alphabet_position(letter)的函数,该函数接收一个字母(一个只有一个字母字符的字符串),并返回该字母在字母中从0开始的数字位置,将0的值分配给a和A,1到b和B,对于z和Z一直到25。

然后,我编写了另一个函数rotate_character(char,rot),该函数接收一个字符char(长度为1的字符串)和一个整数rot。该函数应返回一个新的长度为1的字符串,该字符串是将char按右边的位数腐烂的结果。如果旋转角度大于25,则应使用上方的Alphabet_position函数并回绕到字母的开头。

然后,我编写了又一个名为crypto(text,rot)的函数,该函数接收字符串和整数的输入。第二个参数rot指定旋转量。该函数应返回将文本中每个字母向右旋转的结果。

终端中的结果应如下所示:

$ python caesar.py 输入消息: 你好,世界! 旋转方式: 5 Mjqqt,Btwqi!

对于这的最后一部分,我想创建一个Vigenere密码。

Vigenere使用一个单词作为加密密钥,而不是一个整数。完成的程序将如下所示:

$ python vigenere.py 输入消息: 乌鸦在午夜飞! 加密密钥: 繁荣 Uvs osck rmwse bh auebwsih!

如果您可以提供有关我对这段代码所做的不正确操作的任何信息,我们将不胜感激。

def encrypt(text,rot):
    text_new = ""
    for pos in range(len(text)):
        text_new += rotate_character(text[pos],int(rot))
    return text_new

def alphabet_position(letter):
    alphabet_pos = {'A':0, 'a':0, 'B':1, 'b':1, 'C':2, 'c':2, 
'D':3, 'd':3, 'E':4, 'e':4, 'F':5, 'f':5, 'G':6, 'g':6, 'H':7, 
'h':7, 'I':8, 'i':8, 'J':9, 'j':9, 'K':10, 'k':10, 'L':11, 'l':11, 
'M':12, 'm':12, 'N':13, 'n':13, 'O':14, 'o':14, 'P':15, 'p':15, 
'Q':16, 'q':16, 'R':17, 'r':17, 'S':18, 's':18, 'T':19, 't':19, 
'U':20, 'u':20, 'V':21, 'v':21, 'W':22, 'w':22, 'X':23, 'x':23, 
'Y':24, 'y':24, 'Z':25, 'z':25}
    pos = alphabet_pos[letter]
    return alphabet_position(letter)

def rotate_character(char,rot):
    x = (alphabet_position(char))
    y = (x + rot)%26
    if (ord(char) >= 97) and (ord(char) <= 122): # lowercase
        return x.lower
    elif (ord(char) >= 65) and (ord(char) <=90): # uppercase
        return x.upper
    else:
        return char

char = input('Enter a character:')
rot = input('Enter a number to rotate by:')
print(rotate_character(char,rot))


def main():
    text = input("Type a message")
    print("text")
    rot = input("Rotate by:")


if __name__ == "__main__":
    main()

终端没有返回加密消息的预期结果,而是返回了以下消息: 第10行,在Alphabet_position     返回Alphabet_position(字母)   [上一行重复987次以上] RecursionError:超过了最大递归深度

1 个答案:

答案 0 :(得分:0)

您的alphabet_position函数的返回行使用传递的相同参数进行调用。您可能打算返回alphabet_pos[letter](或更优的是pos)而不是返回alphabet_position(letter)