当前位置:   article > 正文

python头歌-凯撒密码的加密和解密_编写一个能计算凯撒密码的小程序头歌答案

编写一个能计算凯撒密码的小程序头歌答案

凯撒密码的加密

  1. import string
  2. def caesar_cipher(text):
  3. """接收一个字符串为参数,采用字母表和数字中后面第3个字符代替当前字符的方法
  4. 对字符串中的字母和数字进行替换,实现加密效果,返回值为加密的字符串。
  5. 例如:2019 abc 替换为5342 def """
  6. cipher_dict = {}
  7. for index, letter in enumerate(string.ascii_lowercase):
  8. cipher_dict[letter] = string.ascii_lowercase[(index + 3) % 26]
  9. for index, letter in enumerate(string.ascii_uppercase):
  10. cipher_dict[letter] = string.ascii_uppercase[(index + 3) % 26]
  11. for index, digit in enumerate(string.digits):
  12. cipher_dict[digit] = string.digits[(index + 3) % 10]
  13. # 加密处理
  14. ciphertext = ''
  15. for char in text:
  16. if char in cipher_dict:
  17. ciphertext += cipher_dict[char]
  18. else:
  19. ciphertext += char
  20. return ciphertext
  21. if __name__ == '__main__':
  22. plaintext = input()
  23. print(caesar_cipher(plaintext))

凯撒密码的解密

  1. import string
  2. def caesar_decrypt(text, offset):
  3. """接收一个加密的字符串text和一个整数offset为参数,采用字母表和数字中前面第offset个字符
  4. 代替当前字符的方法对字符串中的字母和数字进行替换,实现解密效果,返回值为解密的字符串。"""
  5. lower = string.ascii_lowercase # 小写字母
  6. upper = string.ascii_uppercase # 大写字母
  7. digit = string.digits # 数字
  8. before = string.ascii_letters + digit
  9. after = lower[offset:] + lower[:offset] + upper[offset:] + upper[:offset] + digit[offset:] + digit[:offset]
  10. table = ''.maketrans(after, before)
  11. decrypt_text = text.translate(table)
  12. return decrypt_text
  13. def find_offset(key_text, ciphertext):
  14. """接收一个单词和一个加密字符串为参数,尝试用[0,25]之间的数为偏移量进行解密。
  15. 如果key_text 在解密后的明文里,则说明解密成功。
  16. 找出偏移量数值并返回这个整数偏移量。"""
  17. # 补充你的代码
  18. for i in range(26):
  19. plain_text = caesar_decrypt(ciphertext, i) #使用i作为偏移量,尝试解密得到明文
  20. if key_text in plain_text : # 如果key_text在明文里,说明偏移值为i时能成功解密
  21. return i
  22. if __name__ == '__main__':
  23. key_message = 'question' #密文中的已知单词
  24. cipher_text = 'Yt gj,tw sty yt gj,ymfy nx f vzjxynts.' #截获的密文
  25. secret_key = find_offset(key_message, cipher_text) #破解密码,得到密匙
  26. print(f'密钥是{secret_key}')
  27. target_text = input() #读入新密文,进行解密
  28. #'Fyyfhp ts Ujfwq Mfwgtw ts Ijhjrgjw 2, 6496' #新密文,需要解密
  29. print(caesar_decrypt(target_text, secret_key)) #解密,打印明文
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/476175
推荐阅读
相关标签
  

闽ICP备14008679号