python与base64

最近闲来无聊,尝试用python写了一下base64的解密与加密原理

def jiami(a):
    base64_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
                   'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
                   'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
                   'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/']
    return base64_list[num4]

def jiemi(b):
    base64_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
                   'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
                   'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
                   'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/']
    c = 0
    for i in range(64):
        if base64_list[i] == b:
            c = i
            break
    return c

while True:
    choice = input('请问您是要加密(1)还是解密(2)?:')
    string = input('请输入您要操作的字符串:')
    if choice == '1':
        string1 = ''
        string2 = ''
        for i in string:
            num = ord(i)
            er = bin(num)[2:]
            num1 = len(er)
            num2 = 8 - num1
            for j in range(num2):
                er = '0' + er
            string1 += er
        num3 = len(string1)
        if num3%6 != 0:
            num4 = 6 - num3%6
            for i in range(num4):
                string1 = string1 + '0'
        a = 0
        for j in string1:
            string2 += j
            a += 1
            if a%6 == 0:
                num4 = int(string2[:6],2)
                print(jiami(num4),end='')
                string2 = string2[6:]
        if len(string)%3 != 0:
            for i in range(3 - len(string)%3):
                print('=',end='')
            
    elif choice == '2':
        string1 = ''
        string2 = ''
        for i in string:
            if i == '=':
                break
            num = jiemi(i)
            er = bin(num)[2:]
            num1 = len(er)
            num2 = 6 - num1
            for j in range(num2):
                er = '0' + er
            string1 += er
        num3 = len(string1)
        if num3%8 != 0:
            num4 = 8 - num3%8
            for i in range(num4):
                string1 = string1 + '0'
        a = 0
        for j in string1:
            string2 += j
            a += 1
            if a%8 == 0:
                num4 = int(string2[:8],2)
                print(chr(num4),end='')
                string2 = string2[8:]
    print('\n')
    print('-------------------------------------------------')
    an = input('请问您要继续转换吗(输入n退出,否则继续):')
    if an == 'n':
        break

唔,代码肯定是可以再优化的,只是我能力不足,各位师傅可以参考参考,当然了还可以直接使用python的内置方法,社区里都可以找到,这里就不再赘述了

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值