当前位置: 首页 > 知识库问答 >
问题:

凯撒密码加密。关于不正确转换字符的几个问题

唐博文
2023-03-14

嘿,我想用shift键加密一个字符串。它工作得很完美,我唯一的问题是转移角色。例如,hello,World!0和shift将是5。我希望它返回为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))

共有1个答案

萧卜霸
2023-03-14

如果char.isalpha()==false:,则可以用替换encrypt函数中的第一条if语句。因此,当字符不是字母字符时,字符不会改变。

编辑:也建议一个改进,如果你想,你甚至可以有26个以上的班次。如果您使用key=key%26(%称为modulo,是除法的剩余部分,在本例中是key除以26)。这允许您拥有大于26的密钥。这并没有太大的改变,我只是个人更喜欢它

 类似资料:
  • 我需要编写一个python、hacker和wow这些单词的加密文本,并且使用不包括使用RAW_INPUT的python中的凯撒密码,距离为3。这是我到目前为止,但我不断得到一个错误消息,我不知道如何修复它。

  • 问题内容: 我通过java进行了凯撒密码,它可以运行,但是在用户输入密钥后不对任何内容进行加密! 这是我的代码 跑: 问题答案: 使用效率不是很高…您可以对值进行整数运算以获得其索引。 我在代码中添加了注释以解释更多信息,但这就是我想出的。 输出应该是这样的

  • 我目前正在学习如何使用Python中的凯撒密码方法进行加密/解密。我已经研究了如何加密'14:00/船只就位',以接收'7,21,18,_6,21,22,3,6,_14,5,18,_22,1,_3,2,6,22,7,22,2,1',但正在努力如何编写解密代码。具体地说,我不确定如何使用if/else语句正确地反转原始加密,以及如何将数字转换回字母。每封信将根据小时(班次)的变化。 解密代码

  • 基本上,我必须创建一个凯撒密码,它只是用一个int'k'以外的字母替换给出的每个字母。这需要2个命令行参数:“./caesar”和“k”,它们由用户提供。它工作得很好;但有一个问题: 它将“Barfoo”加密为“Eduirr”,使用3作为正确的密钥;将“Barfoo”加密为“Fevjss”,使用4作为正确的密钥 但是它不是用65作为密钥将“barfoo”加密为“onesbb”,而是将其加密为“oo

  • 因此,目前我的凯撒密码程序运行良好,每当我使用小写字母。但是,当我用大写输入一个单词或短语时,我想让它工作。这是我现在有的代码。希望你们能帮我完成这件事。 def encrypt(消息,距离):“”将获取消息并将其旋转到距离,以创建加密消息“” def decrypt(消息,距离):“”“将解密上面的消息”“” def binaryConversion(消息):“”“将把单词转换成二进制代码”“