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

用于加密的初学者凯撒密码解密过程

韩景辉
2023-03-14

我目前正在学习如何使用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语句正确地反转原始加密,以及如何将数字转换回字母。每封信将根据小时(班次)的变化。

解密代码

import string
def decrypt(s):
    s = "14:00/7,21,18_6,21,22,3,6_14,5,18_22,1_3,2,6,22,7,22,2,1"
    shift = int(s[0:2])
    time, plaintext = s.split("/")
    print(shift)
    print(time)
    print(plaintext)
    letters = string.ascii_lowercase
    result = [] 
    for char in plaintext:
        print(char)
        if char == '_':
            result = result + ' '
        else:
            decode = (int(char) - shift) %26
            result = result + str(decode) +','
    print(result)

def main():
    decode = decrypt("14:00/7,21,18_6,21,22,3,6_14,5,18_22,1_3,2,6,22,7,22,2,1")

main()

共有1个答案

张俊茂
2023-03-14

您的代码需要的主要东西是ordchr函数,用于生成字符,并说明按shift移位是负的(使用模数是正确的)。以下为缩短版。您可以根据自己的代码调整ord和chr的使用,以及Shift的“环绕”数学:

def decrypt(s):
    shift = int(s[0:2])
    time, txt = s.split("/")
    txt = txt.replace('_',',-1,').split(",")
    print(txt)
    txt = (' ' if c=='-1' else chr(ord('a')+(int(c)-shift+26)%26) for c in txt)
    return "".join(txt)
    
print(decrypt("14:00/7,21,18_6,21,22,3,6_14,5,18_22,1_3,2,6,22,7,22,2,1"))

您还可以使用像['a'、'b'、'c'、'd'...]这样的字符列表,并使用列表中的位置来获取所需的字符。

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

  • 首先,我是编程的新手,所以要温柔。而且,我一直在做这个任务,但没有任何结果。任务是创建一个凯撒密码程序,它加密或解密一个段落最多100个字符。实际上是两个独立的实验室。第一个实验是加密,然后第二个实验是解密。一旦我弄清楚了如何创建加密程序,解密程序应该很简单,因为我可以只进行语义更改来解密而不是加密。无论如何,这是我到目前为止的代码。它通过了他们给我们的5个测试中的4个,但出于某种原因,有一个测试

  • 我想知道如何限制加密的ASCII范围从32-126。 这个是用来解密的 我的加密工作得很好(当我引用解密函数时),但我的解密并不像它应该的那样工作。 额外注意:我们只需要在编码时进行右移,给出一个字符串供整个程序加密和解密(“这是C++”) 注意:在添加更多代码描述的过程中

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

  • 这里是一个加密的消息,首先使用3个位置的凯撒密码,然后5个位置。 解密时应该说: 好的,这是我写的类(您将需要所有的导入),我想感谢任何提前帮助的人: