python3中安装Crypto进行aes加密解密
-
安装
在很久以前,crypto在python上面的名字是pycrypto它是一个第三方库,但是我看他的官方文档,最近的版本更新还是在2013年,这是真的年久失修,所以不建议安装这个库;
那怎么办呢,查了一些资料发现可以pycryptodome
pip install pycryptodome
但是,在使用的时候导包是有问题的,这个时候需要修改一个文件夹的名称才可以解决这个问题
将你使用的python版本site-packages中crypto改成Crypto就可以了
怎么说呢,要改文件名,这不是一个很好的事情,尽管这并不麻烦和复杂
但是对于大规模部署以及项目迁移试一个硬伤,也想过写一个shell脚本安装这个库,但是考虑到不同的项目使用的虚拟环境路径不同,所以也没有太大意义
也希望和大家交流一下这种问题解决方案
- 加密和解密
class AesCrypto():
def __init__(self, key, model, iv, encode):
self._encode = encode
self.model = {'ECB': AES.MODE_ECB, 'CBC': AES.MODE_CBC}[model]
self.key = self.add_16(key)
# self.key1 = RSA.import_key(key)
if model == 'ECB':
self.aes = AES.new(self.key, self.model) # 创建一个aes对象
elif model == 'CBC':
self.aes = AES.new(self.key, self.model, iv) # 创建一个aes对象
# 这里的密钥长度必须是16或32,这里使用16位的
def add_16(self, par):
# 转化
par = par.encode(self.encode_)
while len(par) % 16 != 0:
par += b'\x00'
return par
def aesencrypt(self, text):
# aes加密部分
text = self.add_16(text)
self.encrypt_text = self.aes.encrypt(text)
return base64.encodebytes(self.encrypt_text).decode().strip()
def aesdecrypt(self, text):
# aes解密部分
text = base64.decodebytes(text.encode(self.encode_))
self.decrypt_text = self.aes.decrypt(text)
try:
data = json.dumps(self.decrypt_text.decode().strip(b'\x0e'.decode()))
except Exception as e:
# print(e)
data = json.dumps(json.loads(self.decrypt_text)).strip(b'\x0e'.decode())
return remove_control_chars(data)
def remove_control_chars(s):
control_chars = ''.join(map(unichr, [i for i in range(0, 32)] + [i for i in range(127, 160)]))
control_char_re = re.compile('[%s]' % re.escape(control_chars))
return control_char_re.sub('', s)
版权声明:本文为weixin_43145985原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。