凯撒密码加密。没有正确移动字符的一些问题
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。这个其实并没有太大的改变,只是个人比较喜欢而已
嘿,我正在尝试使用 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。这个其实并没有太大的改变,只是个人比较喜欢而已