python encrypt 实现AES加密的实例详解
作者:眼镜儿 发布时间:2023-02-08 18:02:22
标签:python,encrypt,AES加密
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


猜你喜欢
- 下面从以下四种方案分析各自的优缺点。方案一:SELECT * FROM `table` ORDER BY RAND() LIMIT 0,1;
- 用法:mean(matrix,axis=0) 其中 matrix为一个矩阵,axis为参数以m * n矩阵举例:axis 不设置
- PPT链接说实话,看到这个题目时我觉得这有什么好讨论的,肯定会是场一边倒的讨论。因为个人比较倾向于短命名,简单优雅,可能是出于程序员的洁癖,
- 本文思路主要来源于实验楼的教程,但是一些具体的一些细节是我自己发现的,比如哪里获得站点对应的3位英文编号,怎么获得这个查询的url本文用到的
- 这篇文章主要介绍了Python进度条的制作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 程序运行前加载1.导包前面加下划线,运行前加载2.把要加载的写在init函数里面路由设置路由的作用:根据不同的请求指定不同的控制器路由函数:
- 前言我们在django-rest-framework 自定义swagger 文章中编写了接口, 调通了接口文档. 接口文档可以直接填写参数进
- 🔓一. CRUDCRUD : Create,Retrieve,Update,Delete新增数据查询数据修改数据删除数据MySQL的工作就是
- 1.数据是什么?在 Python 以及其他所有面向对象编程语言中,类都是对数据的构成(状态)以及数据 能做什么(行为)的描述。由于类的使用者
- 一、背景在平时的软件开发过程中常常会有这样的场景,自己负责的某个模块会依赖其他模块或者第三方的library。这时你自己的模块是一个独立的代
- 1 问题在使用pyecharts绘制可视化地图信息时候,默认出现的图像是带有圆点标记,比如官网代码运行输出如下:2 问题解决方式一: sho
- 2022-09-29shell操作:我在使用中是pycharm与数据库建立连接的一个工具。使用的环境:在此处是用在了虚拟环境中。使用场景:一
- #coding=gbkfrom xml.dom import minidom,Nodeimport urllib2,re,osdef rea
- 新浪天气预报代码,需要的朋友可以复制下面的代码到要显示的页面,新浪代码 :<IFRAME WIDTH='260
- Python 中有三个非常好用的数据结构,列表,元组和字典, 元组是不可变的,列表可以保存任意类型的Python对象,并可以随意扩展没有大小
- 因为我们现在的前端框架做性能优化,为了找到各个组件及框架的具体解析耗时,需要在框架中嵌入一个耗时测试工具,性能测试跟不同的计算机硬件配置有很
- python作为使用最广泛的编程语言之一,有着无穷无尽的第三方非标准库的支持。简单的语法、优雅的代码块使其在各个业务领域都混的风生水起,除了
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 15 - SlidersMooTools 1.2的
- 本文实例讲述了Windows下安装Django框架的方法。分享给大家供大家参考,具体如下:在idea上运行Python项目时,出现了如下错误
- 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息。为了能够更好的使用面向对象编程思想进行程序