由于最近项目需要对一些比较敏感信息,比如账号信息,不能明文提供用户,需要加密处理,然后使用的时候再由封装好的程序去解密。
1. AES算法简介
AES算法详解:高级加密标准,它是一种对称加密算法,AES只有一个密钥,这个密钥既用来加密,也用于解密。
AES加密方式有五种:ECB, CBC, CTR, CFB, OFB。
从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现。
CBC 和ECB模式的区别就是:
- CBC加密需要一个十六位的key(密钥)和一个十六位iv(偏移量)
- ECB加密不需要iv,只需要key(密钥)
2.模块安装
在 Windows下使用AES时要安装的是pycryptodome 模块
pip install pycryptodome
在 Linux下使用AES时要安装的是pycrypto模块
pip install pycrypto
3.AES的ECB 模式实现
import base64
from Crypto.Cipher import AES
class EncryptDate(object):
def __init__(self):
self.key = "abcx2211230CoJUm".encode("utf-8") # 初始化密钥
self.iv = "9999999999999999".encode("utf-8") # 初始化偏移量
self.length = 16 # 初始化数据块大小
self.aes = AES.new(self.key, AES.MODE_CBC, self.iv) # 初始化AES,ECB模式的实例
# 截断函数,去除填充的字符
self.unpad = lambda s: s[0:-s[-1]]
def pad(self, text):
"""
填充函数,使被加密数据的字节码长度是block_size的整数倍
"""
count = len(text.encode('utf-8'))
add = self.length - (count % self.length)
entext = text + (chr(add) * add)
return entext
def encrypt(self, encrData): # 加密函数
a = self.pad(encrData)
res = self.aes.encrypt(a.encode("utf-8"))
msg = str(base64.b64encode(res), encoding="utf8")
return msg
def decrypt(self, decrData): # 解密函数
res = base64.decodebytes(decrData.encode("utf-8"))
msg_text = self.aes.decrypt(res)
decrypt_text = self.unpad(msg_text).decode('utf8')
return decrypt_text
if __name__ == '__main__':
pwd = '&HKJASBkjs#&1'
pwd1 = EncryptDate().encrypt(pwd)
pwd2 = EncryptDate().decrypt(pwd1)
print('原始密码:',pwd)
print('加密密码:',pwd1)
print('解密密码:',pwd2)
版权声明:本文为CSDN博主「埃菲尔没有塔尖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38819889/article/details/123642201