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

用凯撒密码包住ASCII

姚飞昂
2023-03-14

我在做凯撒密码,这是我的密码

def getinputfile(message):
    list_ = []
    with open(message, 'r') as lines:
        content = lines.readlines()
    
    for i in content:
        list_.append(i.strip())
    
    return list_
    
def decrpyt(list_):
    decrypt_num = []
    decrypt_list = []    
    sec_message = list_[1]
    sec_key = int(list_[0])
    
    for letter in sec_message :
        uni_num = (ord(letter) - sec_key) 
        decrypt_num.append(uni_num)
    
    for unicode in decrypt_num:
        uni_letter = chr(unicode)
        decrypt_list.append(uni_letter)    
    return decrypt_list

def main():
    message = getinputfile('secretMessage1.txt')
    decrpyted_message = decrpyt(message)
    print(''.join(decrpyted_message))
main()

我尝试使用%来解决这个问题(我也不是100%确定如何使用模运算符),但我没有成功。

文本文件的内容是:

18

UgFYjSLMDsLAGFk

共有1个答案

柳景胜
2023-03-14

移动每个字母,使您旋转的字母表映射到0-25,应用转换,执行%26,然后将其移回。

>>> def decrypt(message: str, key: int) -> str:
...     def decrypt_letter(letter: str) -> str:
...         alpha = ord('a' if letter.islower() else 'A')
...         return chr((ord(letter) - alpha - key) % 26 + alpha)
...     return ''.join(decrypt_letter(c) for c in message)
...
>>> with open('secretMessage1.txt') as file:
...     key, message = file.readlines()
...     print(decrypt(message.strip(), int(key.strip())))
...
CoNGrATULaTIONs

(编辑)如果输出实际上不需要保留大小写,那么decrypt函数将变得简单得多--只需将消息小写,然后可以忽略islower()检查。

>>> def decrypt(message: str, key: int) -> str:
...     return ''.join(
...         chr((ord(c) - ord('a') - key) % 26 + ord('a'))
...         for c in message.lower()
...     )
...
>>> decrypt("UgFYjSLMDsLAGFk", 18)
'congratulations'
 类似资料:
  • 我需要编写一个python、hacker和wow这些单词的加密文本,并且使用不包括使用RAW_INPUT的python中的凯撒密码,距离为3。这是我到目前为止,但我不断得到一个错误消息,我不知道如何修复它。

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

  • 示例:返回。如果给定的整数值小于0或大于26,则应返回空字符串。 我的问题是,作为回报,它只给我真或假。如何解决这个问题:该方法应该返回一个字符串,其中每个字符都是根据指定的整数值移动的。

  • 我正在为我的计算机科学课做凯撒密码,我被卡住了。我已经想出了如何满足项目所需的一些元素,比如空格,当加密密钥设置为一个固定的数字时,它就可以工作了。然而,其中一个要求是,当你点击“Z”时,字母表会环绕,用户可以输入他们自己的加密密钥值。它还需要加密和解密消息。任何提示,任何人可以给我关于哪里我走错了,将不胜感激!以下是我目前所拥有的:(我是在Eclipse中制作的)

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