-
-
[原创]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
#-*- 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
赞赏
他的文章
- [分享]grok-1 2368
- [原创]pyoneGUI让你实现插件自由 12930
- [原创]123为什么是F642 6078
看原图
赞赏
雪币:
留言: