凯撒密码加密。没有正确移动字符的一些问题

Caesar cipher encrypt. Some issues with not properly shifting the characters

嘿,我正在尝试使用 shift 键加密字符串。它工作得很好,我唯一的问题是移动角色。例如 hello, world!0 并且班次将为 5。我希望它 return 为 olssv, dvysk!0 基本上,只有字母会被加密。标点和数字等不会移位

keymax = 26
def text():
    print('What message(s) are you trying to encrypt?')
    return input()

def shift():
    key = 0;
    while True:
        print('Enter the key number (1-%s)' % (keymax))
        key = int(input())
        if (key >= 1 and key <= keymax):
            return key

def encrypt(string, shift):
    hidden = ''
    for char in string:
        if char == ' ':
            hidden = hidden + char
        elif  char.isupper():
            hidden = hidden + chr((ord(char) + shift - 65) % 26 + 65)
        else:
          hidden = hidden + chr((ord(char) + shift - 97) % 26 + 97)

    return hidden

text = text()
s = shift()
print("original string: ", text)
print("after encryption: ", encrypt(text, s))

我是 python 的新手,请原谅我的错误理解。如有任何帮助,我们将不胜感激!

您可以将加密函数中的第一个 if 语句替换为 if char.isalpha() == False:。所以当字符不是字母字符时,字符不会改变。

编辑:另外建议改进,如果你愿意,你甚至可以向上移动 26。如果你使用 key = key % 26(%,称为模,是除法的余数,在这种情况下密钥除以 26)。 这样可以让你拥有超过26个的key。这个其实并没有太大的改变,只是个人比较喜欢而已