def decrypt(cipher_text, key): mapping_dict = str.maketrans(key) return cipher_text.translate(mapping_dict) origin_table = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!0 $%&0()*+,-./:;<=>?@[\]^_`{|}~ ' note_table = '+~MxF!]y0[}HYz<Z2q=f7G|T/cb&P k\Ue%1lh5;nEVD0L)^,Cp">Km_Ja*wv{#B-QRusXi00j0r4O3$o(0:Wg608?dS9.t9AN@I' result_dict = {} for i in range(len(origin_table)): result_dict[origin_table[i]] = note_table[i] cipher = 'ZG}2d;+8T+ 8Vp8FZ x&8mYq//^8YM]+YZ' print(decrypt(cipher ,result_dict))
时间: 2024-03-24 10:37:55 浏览: 33
这段代码定义了一个解密函数`decrypt`,用于将密文`cipher_text`按照密钥`key`进行解密,返回解密后的明文。具体实现是通过创建一个映射字典`mapping_dict`,将密钥`key`中的字符映射为Unicode码点,再调用字符串的`translate`方法进行解密。
在该代码中,定义了两个字符串`origin_table`和`note_table`,分别表示原始字符集和加密后的字符集。通过循环遍历原始字符集,将每个字符映射到加密后的字符集中,最终得到一个映射字典`result_dict`。
最后,给定一个密文`cipher`,调用`decrypt`函数进行解密,并输出解密后的明文。
需要注意的是,该代码中使用了一些特殊字符,如`{}`、`[]`、`^`等,这些字符在Python中有特殊含义,需要进行转义。如果出现`unicodeescape`错误,通常是因为字符串中的转义序列不正确导致的。可以尝试在字符串前加上`r`前缀,表示该字符串是一个“原始字符串”,不需要进行转义。例如:
```
origin_table = r'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!0 $%&0()*+,-./:;<=>?@[\]^_`{|}~ '
note_table = r'+~MxF!]y0[}HYz<Z2q=f7G|T/cb&P k\Ue%1lh5;nEVD0L)^,Cp">Km_Ja*wv{#B-QRusXi00j0r4O3$o(0:Wg608?dS9.t9AN@I'
```
相关问题
def decrypt(cipher_text, key): mapping_dict = str.maketrans(key) return cipher_text.translate(mapping_dict)
这段代码是一个简单的解密函数,接受密文和密钥作为参数,使用 str.maketrans() 函数创建一个映射表,然后使用 translate() 方法将密文中的字符根据映射表进行解密。
具体来说,str.maketrans() 函数接受两个参数,第一个参数是需要被替换的字符,第二个参数是替换的字符,这两个参数必须具有相同的长度。函数会返回一个映射表,用于将第一个参数中的字符替换为第二个参数中的字符。
translate() 方法接受一个映射表作为参数,将字符串中的字符根据映射表进行替换。因此,decrypt() 函数会将密文中的字符根据密钥进行解密,并返回解密后的明文。
需要注意的是,这段代码只适用于简单的替换密码,对于复杂的加密算法可能并不适用。
def guess_key1(cipher_text, words): letter_frequency = get_letter_frequency(cipher_text.lower()) sorted_letters = sorted(letter_frequency.keys(), key=lambda x: letter_frequency[x], reverse=True) # paixu most_common_letters = sorted_letters[:6] # first 6 for i in range(len(most_common_letters)): for j in range(i+1, len(most_common_letters)): for k in range(j+1, len(most_common_letters)): key = {most_common_letters[i]: 'e', most_common_letters[j]: 't', most_common_letters[k]: 'a'} # key = {'n': 'e', 'o': 't', 's': 'a'} .... decrypted_text = decrypt(cipher_text, key) if is_plaintext(decrypted_text, words): return key def decrypt(cipher_text, key): mapping_dict = str.maketrans(key) return cipher_text.translate(mapping_dict) def is_plaintext(text, words): words_found = 0 for word in text.split(): if word.lower() in words: words_found += 1 return (words_found / len(text.split())) > 0.001 其中key并没有替换掉所有字母,修改
可以尝试将key字典中没有替换的字母的值设置为出现频率最高的字母,即将如下代码:
```
key = {most_common_letters[i]: 'e', most_common_letters[j]: 't', most_common_letters[k]: 'a'}
```
修改为:
```
key = {most_common_letters[i]: 'e', most_common_letters[j]: 't', most_common_letters[k]: 'a'}
for letter in sorted_letters:
if letter not in key:
key[letter] = sorted_letters[0]
```
这样就可以保证key字典中所有字母都被替换了,并且未被替换的字母的值为出现频率最高的字母。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)