python / 学习 / 未分类 · 2021年9月18日

python通过binascii库写一个简单对称加解密功能

先来了解binascii用到的函数

b2a_hex(data),二进制数据转16进制形式

如上图,先用encode()方法将字符串转为二进制,再用b2a_hex()

a2b_hex(data),与上相反。

b2a_base64(data),二进制数据转换为base64的数据。

a2b_base64,与上相反。

binascii.b2a_uu(data),二进制数据转化为一行以ascii编码的字符。

写一个将字符串转为一串码的函数。

def str_code(st):
s=st.encode(‘utf-8’)
ss=binascii.b2a_hex(s)
ss=binascii.b2a_base64(ss)
ss=binascii.b2a_hex(ss)
sts=ss.decode(‘utf-8’) #二进制转为字符串
sst=sts[::-1] #倒序
return sst

再写一个相反的一串码转回字符串。

def code_str(st):
s_t=st[::-1]
ss=binascii.a2b_hex(s_t)
sts=binascii.a2b_base64(ss)
ss=binascii.a2b_hex(sts)
sst=ss.decode(‘utf-8’)
return sst

加入key功能的函数

key转为一串码的另写一个函数

def key_code(st):
s=st.encode(‘utf-8’)
ss=binascii.b2a_uu(s)
ss=binascii.b2a_base64(ss)
ss=binascii.b2a_hex(ss)
sts=ss.decode(‘utf-8’)
sst=sts.replace(‘\n’,”) #去掉换行符
return sst

加密的函数

def enstr(st,k):
sst=str_code(st)
ks=key_code(k)
ss=sst+ks
return ss

解密的函数

def destr(st,k):
ks=key_code(k)
s=st.replace(ks,”)
try:
ss=code_str(s)
except:
ss=’密文或key错误’
return ss

运行如下

a=enstr(‘加密测试’,’加密’)
print(a)
b=destr(a,’加密’)
print(b)
c=destr(a,’加’)
print(c)

结果

>>>a013b6a6a5868645a5968645e496a545a52376a6a5866545a577547595435545a54a6c6b34536b425a4f6c346d43673d3d0a
>>>加密测试
>>>密文或key错误