python之培根密码加解密

继续写古典密码之培根密码的加解密代码,因为加解密逻辑很简单,创建字典然后从字典检索就可以了,所以写的很快,下面直接粘贴代码

'''
培根密码
加密里只有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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值