初衷是对工具使用有一个过期限定,研究采用AES和Base64加密方法,借用key对加密内容进行加密,解密时采用统一的key进行解密即可。
mport base64
from Crypto.Cipher import AES
class encipherment():
def __init__(self):
self.aes_key = '我是十六位的key'
self.base64_key = '自定义key'
# 需要补位,str不是16的倍数那就补足为16的倍数
def add_to_16(self,value):
'''
AES对称加密算法
'''
while len(value) % 16 != 0:
value += '\0'
return str.encode(value) # 返回bytes
# AES加密方法
def aes_encrypt(self, text):
aes = AES.new(self.add_to_16(self.aes_key), AES.MODE_ECB) # 初始化加密器
encrypt_aes = aes.encrypt(self.add_to_16(text)) # 先进行aes加密
encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8') # 执行加密并转码返回bytes
return encrypted_text
# AES解密方法
def aes_decrypt(self, text):
aes = AES.new(self.add_to_16(self.aes_key), AES.MODE_ECB) # 初始化加密器
text = str(text, encoding="utf-8") #byte 转str
base64_decrypted = base64.decodebytes(text.encode(encoding='utf-8')) # 优先逆向解密base64成bytes
decrypted_text = str(aes.decrypt(base64_decrypted), encoding='utf-8').replace('\0', '') # 执行解密密并转码返回str
return decrypted_text
def base64_encrypt(self,aes_v):
'''
base64 加密,并通过key进行再处理防止解密
:param aes_v:
:return:
'''
aes_v = aes_v.encode('utf-8')
base64_v= base64.b64encode(aes_v) #BASE64加密
base64_str = str(base64_v, encoding="utf-8")
bs64_list = list(base64_str)
for inx, val in enumerate(list(self.base64_key)):
bs64_list.insert((inx+1)*2, val)#根据key值添加字符串
base64_encrypt_v = ''.join(bs64_list)
return base64_encrypt_v
def bse64_decrypt(self,base64_en_v):
'''
base64解密,先处理回原始的加密报文,再进行解密
:param base64_encrypt_str:
:return:
'''
try:
i = 0
base64_encrypt_list = list(base64_en_v)
while len(self.base64_key) - i:
inx = (len(self.base64_key) - i) * 2
base64_encrypt_list.pop(inx) # 删除添加的字符
i = i + 1
base64_encrypt_str_tmp = ''.join(base64_encrypt_list)
debs64_decrypt_v = base64.b64decode(base64_encrypt_str_tmp)
return debs64_decrypt_v
# print(debs64_decrypt_v)
except Exception as e:
print(e)