继续写古典密码之培根密码的加解密代码,因为加解密逻辑很简单,创建字典然后从字典检索就可以了,所以写的很快,下面直接粘贴代码
'''
培根密码
加密里只有a和b
'''
import string
key_lower = ["aaaaa", "aaaab", "aaaba", "aaabb", "aabaa", "aabab", "aabba", "aabbb", "abaaa", "abaab", "ababa", "ababb", "abbaa", "abbab", "abbba", "abbbb", "baaaa", "baaab", "baaba", "baabb", "babaa", "babab", "babba", "babbb", "bbaaa", "bbaab"]
key_upper = ['AAAAA','AAAAB','AAABA','AAABB','AABAA','AABAB','AABBA','AABBB','ABAAA','ABAAA','ABAAB','ABABA','ABABB','ABBAA','ABBAB','ABBBA','ABBBB','BAAAA','BAAAB','BAABA','BAABB','BAABB','BABAA','BABAB','BABBA','BABBB']
letters_lower = list(string.ascii_lowercase)
letters_upper = list(string.ascii_uppercase)
#生成解密字典
key_lower_dict = dict(zip(key_lower,letters_upper))
key_upper_dict = dict(zip(key_upper,letters_lower))
print(key_lower_dict)
print(key_upper_dict)
#生成加密字典
ekey_lower_dict = dict(zip(letters_lower,key_upper))
ekey_upper_dict = dict(zip(letters_upper,key_lower))
# print(ekey_lower_dict)
# print(ekey_upper_dict)
def encryption(plaintext):
ciphrtext = []
for i in plaintext:
if plaintext.isupper():
ciphrtext.append(ekey_upper_dict[i])
elif plaintext.islower():
try:
ciphrtext.append(ekey_lower_dict[i])
except:
ciphrtext.append(' ')
else:
ciphrtext.append(' ')
print('密文为: '+''.join(ciphrtext))
def decryption(ciphertext):
plaintext = []
jp = range(int(len(ciphertext)))
jps = jp[::5]
for i,j in zip(ciphertext,jps):
if ciphertext.isupper():
plaintext.append(key_upper_dict[ciphertext[j:j+5]])
print(f'根据{ciphertext[j:j+5]}查到{key_upper_dict[ciphertext[j:j+5]]}')
elif ciphertext.islower():
plaintext.append(key_lower_dict[ciphertext[j:j+5]])
print(f'根据{ciphertext[j:j + 5]}查到{key_upper_dict[ciphertext[j:j + 5]]}')
else:
plaintext.append(' ')
print('明文为: ' + (''.join(plaintext)).replace('j','i').replace('v','u'))
if __name__ == '__main__':
enter = 0
#编码
if enter == 0:
plaintext = 'qingyu yyds'
encryption(plaintext)
#解码
if enter == 1:
ciphertext = 'ABBBBABAAAABBAAAABBABABBABAABBBABBABABBAAAABBBAAAB'
decryption(ciphertext)