首页
社区
课程
招聘
[原创]Base64编码/解码(python)
发表于: 2015-6-30 11:26 1663

[原创]Base64编码/解码(python)

2015-6-30 11:26
1663
自己实现的python base64编码/解码。为什么要造轮子?反正就是解决问题的中间产物。

#-*- coding: utf-8 -*-
import re
import logging
import os
import time

cur_time = time.strftime( '%Y-%m-%d %X', time.localtime( time.time() ) ).replace(':','').replace(' ','_')
log_file = os.getcwd()+'./log/myapp'+cur_time+'.log'

class CBase64():
    def __init__(self):
        self.table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-'

    def encode(self,data):
        try:
            if len(data)==0: return

            sbin = ''
            for i,d in enumerate(data):
                #print(i,d)
                t = bin(ord(d))[2:]
                #print(t)
                t = '0'*(8-len(t))+t
                #print(t)
                sbin = sbin+t

            npad = 0
            if len(data)%3!=0:
                npad = 3-len(data)%3
                sbin = sbin+'0'*8*npad

            #print(npad)
            print(sbin)
            lst = re.findall(r'.{1,6}',sbin)
            #print(lst)
            out = ''
            for i in xrange(0,len(lst)-npad):
                table_i = int(lst[i],2)
                out = out+self.table[table_i]
            out = out+'='*npad
            return out
        except Exception as e:
            logging.error('encode :%s'%(str(e)))

    def decode(self,data):
        try:
            s = data.replace('=','')
            #print(s)
            sbin = ''
            for i,d in enumerate(s):
                talbe_i = self.table.find(d)
                if -1==talbe_i:
                    print('error data :%c',d)
                    return

                t = bin(talbe_i)[2:]
                t = '0'*(6-len(t))+t
                sbin = sbin+t

            print(sbin)
            #print(len(sbin)%8)
            end = len(sbin)-len(sbin)%8
            sbin = sbin[0:end]
            lst = re.findall(r'.{1,8}',sbin)
            #print(lst)
            out = ''
            for i,d in enumerate(lst):
                #print(i,d)
                ch = chr(int(d,2))
                #print(ch)
                out = out+ch
            #print(out)
            #print(bin(ord(out[len(out)-1]))[2:])
            return out

        except Exception as e:
            logging.error('decode :%s'%(str(e)))

def logger_init():
    if False == os.path.exists('./log'):
        os.mkdir('./log')

    logging.basicConfig(level=logging.ERROR,
                        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                        datefmt='%a, %d %b %Y %H:%M:%S',
                        filename=log_file,
                        filemode='w')

def main():
    logger_init()
    s = 'abc中国标准时间12345'
    print('加密:')
    d = CBase64().encode(s)
    print(d)
    print('解密:')
    print(CBase64().decode(d))

if __name__=='__main__':
    main()

# 参考
# 1.  http://base64.xpcha.com/
# 2.  http://blog.csdn.net/imzoer/article/details/8703258

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//