python encrypt 实现AES加密的实例详解
作者:眼镜儿 时间:2023-02-08 18:02:22
AES加密方式有五种 : ECB, CBC, CTR, CFB, OFB
从安全性角度推荐cbc算法
windows 下安装 : pip install pycryptodome
linux 下安装 : pip install pycrypto
cbc加密需要一个十六位的key 和一个十六位的iv(偏移量)
ecb加密不需要iv
aes cbc 加密的python实现
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
# 如果text不足十六位的倍数用空格补充
def add_to_16(text):
if len(text.encode('utf8')) % 16:
add = 16 - (len(text.encode('utf8')) % 16)
else:
add = 0
text = text + '\0' * add
return text
# 加密
def encrypt(text):
key = '9999999999999999'.encode('utf8')
mode = AES.MODE_CBC
iv = b'qqqqqqqqqqqqqqqq'
text = add_to_16(text)
cryptos = AES.new(key, mode, iv)
cipher_text = cryptos.encrypt(text)
# 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
return b2a_hex(cipher_text)
# 解密后去掉空格
def decrypt(text):
key = '9999999999999999'.encode('utf8')
mode = AES.MODE_CBC
iv = b'qqqqqqqqqqqqqqqq'
cryptos = AES.new(key, mode, iv)
plain_text = cryptos.decrypt(a2b_hex(text))
return bytes.decode(plain_text).rstrip('\0')
if __name__ == '__main__':
a = encrypt('hello')
b = decrypt(a)
print('加密', a)
print('解密', b)
aes ecb加密, 没有偏移量iv
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
# 如果text不足十六位的倍数用空格补充
def add_to_16(text):
if len(text.encode('utf8')) % 16:
add = 16 - (len(text.encode('utf8')) % 16)
else:
add = 0
text = text + '\0' * add
return text
# 加密
def encrypt(text):
key = '9999999999999999'.encode('utf8')
mode = AES.MODE_ECB
text = add_to_16(text)
cryptos = AES.new(key, mode)
cipher_text = cryptos.encrypt(text)
# 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
return b2a_hex(cipher_text)
# 解密后去掉空格
def decrypt(text):
key = '9999999999999999'.encode('utf8')
mode = AES.MODE_ECB
cryptos = AES.new(key, mode)
plain_text = cryptos.decrypt(a2b_hex(text))
return bytes.decode(plain_text).rstrip('\0')
if __name__ == '__main__':
a = encrypt('hello')
b = decrypt(a)
print('加密', a)
print('解密', b)
来源:https://www.cnblogs.com/zhangjian0092/p/12335542.html
标签:python,encrypt,AES加密
0
投稿
猜你喜欢
mysql本地登录无法使用端口号登录的解决方法
2024-01-25 06:51:30
Python实现CET查分的方法
2023-06-13 12:05:51
python开发利器之ulipad的使用实践
2021-07-25 00:55:17
MySql模糊查询json关键字检索方案示例
2024-01-16 13:57:44
python实现在函数中修改变量值的方法
2023-12-15 04:15:02
Python LeNet网络详解及pytorch实现
2021-11-15 01:19:17
vscode检测到#include错误请更新includePath的解决方法
2022-10-14 22:58:04
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2023-11-24 20:50:54
Bootstrap复选框和单选按钮美化插件(推荐)
2023-07-02 05:24:53
windows11安装SQL server数据库报错等待数据库引擎恢复句柄失败解决办法
2024-01-16 07:18:52
MySQL 8.0.29 解压版安装配置方法图文教程
2024-01-16 03:20:50
python实现扫雷游戏的示例
2023-04-14 12:07:21
Django的restframework接口框架自定义返回数据格式的示例详解
2023-06-13 05:13:51
Linux 自动备份oracle数据库详解
2023-07-14 08:11:41
javascript事件冒泡实例分析
2023-07-02 05:29:58
C#简单查询SQLite数据库是否存在数据的方法
2024-01-13 04:34:48
如何操作Access数据库?
2009-11-11 19:23:00
Python threading中lock的使用详解
2023-01-16 08:32:26
拒绝盗图!教你怎么用python给图片加水印
2022-05-29 21:42:51
SEM之医疗网站跳出率 逼迫访客跳出网站的六宗罪
2012-03-05 20:13:36