赞
踩
凯撒密码的加密
- import string
-
- def caesar_cipher(text):
- """接收一个字符串为参数,采用字母表和数字中后面第3个字符代替当前字符的方法
- 对字符串中的字母和数字进行替换,实现加密效果,返回值为加密的字符串。
- 例如:2019 abc 替换为5342 def """
- cipher_dict = {}
- for index, letter in enumerate(string.ascii_lowercase):
- cipher_dict[letter] = string.ascii_lowercase[(index + 3) % 26]
- for index, letter in enumerate(string.ascii_uppercase):
- cipher_dict[letter] = string.ascii_uppercase[(index + 3) % 26]
- for index, digit in enumerate(string.digits):
- cipher_dict[digit] = string.digits[(index + 3) % 10]
-
- # 加密处理
- ciphertext = ''
- for char in text:
- if char in cipher_dict:
- ciphertext += cipher_dict[char]
- else:
- ciphertext += char
-
- return ciphertext
-
-
- if __name__ == '__main__':
- plaintext = input()
- print(caesar_cipher(plaintext))
凯撒密码的解密
- import string
-
- def caesar_decrypt(text, offset):
- """接收一个加密的字符串text和一个整数offset为参数,采用字母表和数字中前面第offset个字符
- 代替当前字符的方法对字符串中的字母和数字进行替换,实现解密效果,返回值为解密的字符串。"""
- lower = string.ascii_lowercase # 小写字母
- upper = string.ascii_uppercase # 大写字母
- digit = string.digits # 数字
- before = string.ascii_letters + digit
- after = lower[offset:] + lower[:offset] + upper[offset:] + upper[:offset] + digit[offset:] + digit[:offset]
- table = ''.maketrans(after, before)
- decrypt_text = text.translate(table)
- return decrypt_text
-
-
-
- def find_offset(key_text, ciphertext):
- """接收一个单词和一个加密字符串为参数,尝试用[0,25]之间的数为偏移量进行解密。
- 如果key_text 在解密后的明文里,则说明解密成功。
- 找出偏移量数值并返回这个整数偏移量。"""
- # 补充你的代码
- for i in range(26):
- plain_text = caesar_decrypt(ciphertext, i) #使用i作为偏移量,尝试解密得到明文
- if key_text in plain_text : # 如果key_text在明文里,说明偏移值为i时能成功解密
- return i
-
-
-
- if __name__ == '__main__':
- key_message = 'question' #密文中的已知单词
- cipher_text = 'Yt gj,tw sty yt gj,ymfy nx f vzjxynts.' #截获的密文
- secret_key = find_offset(key_message, cipher_text) #破解密码,得到密匙
- print(f'密钥是{secret_key}')
-
- target_text = input() #读入新密文,进行解密
- #'Fyyfhp ts Ujfwq Mfwgtw ts Ijhjrgjw 2, 6496' #新密文,需要解密
- print(caesar_decrypt(target_text, secret_key)) #解密,打印明文
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。