用python实现AES加密解密
文章目录
- 背景
- 测试数据
- 代码
- 遗留问题
- 补充(2021.10.6)
背景
以蓝牙官方协议(V5.0)中的 sample data 为例子,看看怎么用 python 实现 AES 加密和解密。
测试数据
我们看看怎么由 SK 和 B0 得到 X1,然后从 X1 得到 B0
代码
from Crypto.Cipher import AES # install pycryptodome
import binasciiSK = binascii.unhexlify('99AD1B5226A37E3E058E3B8E27C2C666') # MSB - LSB
B0 = binascii.unhexlify('49000000008024ABDCBABEBAAFDE0001') # LSB - MSB# 加密
plaintext = B0
rijn = AES.new(SK, AES.MODE_ECB)
ciphertext = rijn.encrypt(plaintext)
result = binascii.hexlify(ciphertext).decode('utf-8')
print(result)# 解密
plaintext = rijn.decrypt(ciphertext)
result = binascii.hexlify(plaintext).decode('utf-8')
print(result)
运行结果:
712eaaaae60603521d245e50786eefe4
49000000008024abdcbabebaafde0001
说明:
为了使用 AES 模块,需要安装 pycryptodome
binascii.unhexlify(hexstr)
:返回由十六进制字符串 hexstr 表示的二进制数据。 hexstr 必须包含偶数个十六进制数字(可以是大写或小写),否则会引发Error
异常。binascii.hexlify(data)
: 返回二进制数据 data 的十六进制表示形式。 data 的每个字节都被转换为相应的 2 位十六进制表示形式。因此返回的字节对象的长度是 data 的两倍。
遗留问题
我对字节序这块比较困惑,网上说 AES 是按照字节来加密的,可以认为明文是一个字节一个字节送进加密引擎,所以应该是低字节在前面;那 KEY 应该是什么顺序呢?是大端吗?
我尝试用 http://www.efgh.com/software/rijndael.htm 的代码实现,发现在下面的函数中:
int rijndaelSetupEncrypt(uint32_t *rk, const uint8_t *key, int keybits)
第二个参数 key,应该是从 MSB 到 LSB,也就是说 key[0] = 0x99,key[1] = 0xAD;…
补充(2021.10.6)
考虑到大小端的问题,有时候需要对字符串做端的转换,添加一个小函数。
def reverse(key):out = ''for i in range(30, -1, -2):out = out + key[i:i+2]return out
解释一下,假定 key 字符串的长度是 32 个字符
循环中 i 的取值是 30,28,26,…,0
这样就可以构成切片 key[30:32] , key[28:30] , key[26:28] , … , key[0:2],把它们拼在一起就可以得到结果。
【End】
用python实现AES加密解密相关推荐
- windows中使用Python进行AES加密解密-文本文件加密工具
之前的文章http://blog.csdn.net/u013578500/article/details/77905924 简单介绍了一下使用PyCrypto模块实现对字符串的加密解密,里面有提到我利 ...
- python 加密解密_python实现AES加密解密
本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原 ...
- aes加密算法python语言实现_C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]...
原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...
- AES加密解密python实现
1.前言 关于现代密码学算法,可以查看以下博客全面了解 CISSP考试要求里的"应用密码学"内容辅助记忆趣味串讲_晓翔仔的博客-CSDN博客 AES的细节知识,可以查阅 AES加密 ...
- Python crypto模块实现RSA和AES加密解密
Python crypto模块实现RSA和AES加密解密 Python的crypto是用于RSA加密解密,AES加密解密的. 一.RSA和AES简介 RSA加密算法是一种非对称加密算法.RSA 是19 ...
- python AES加密解密
AES,是美国联邦政府采用的一种加密技术,AES有几个模式,其中CBC模式是公认的安全性最好的模式,被TLS所采用. 加密与解密双方需确定好key,key的长度可以是16位,24位,32位中的一个,分 ...
- Python实现AES加密进行PKCS5Padding的填充
Python实现AES加密进行PKCS5Padding的填充 (1)Python 需要导入的模块 (2)AES加密代码 (3)AES解密代码 (4)测试代码 (5)测试结果
- JS逆向加解密——python 实现AES加解密
前言 写爬虫项目,做JS逆向或者APP逆向时,经常遇到网站的很多参数都经过AES加密解密,用python实现AES加解密是非常简单的,免去了扣JS代码,并且实现格式固定,所以本文提供实现好的AES加解 ...
- python实现AES加解密文档里英文字符串
python实现AES加解密文档里英文文章 AES加解密文档里英文字符串 英文文档中也包含了空格与回车符 加密过程 首先读取文件中的内容 将文档中的内容读取,然后将其赋予你申请的变量 在我的实验中我的 ...
最新文章
- 【基于XML方式】Spring整合Kafka
- Git笔记(23) 不同角色的贡献
- 张雪峰考研计算机怎么选学校,考研该如何选择学校?张雪峰老师妙语连珠
- 第二章 ASP.NET MVC (控制器向视图传递值(二))
- iPhone/iPad/iPod touch编程时版本区分
- oracle jde优势介绍,Oracle_JDE_EnterpriseOne模块的详细功能介绍
- Android SwipeRefreshLayout官方下拉刷新控件介绍(与知乎Android客户端下拉刷新一样!!)
- MFC版 黄金矿工 游戏开发记录
- 快应用是什么软件?快应用有什么用?
- 活动回顾丨研发效能度量线下沙龙圆满举办
- jquery获取兄弟节点
- 使用SCRAPY框架获取网易云排行榜歌单
- SqlDataReader转换为DataTable
- 朋友问我:电脑连接不上WIFI,显示无法连接到这个网络,怎么解决?
- 通关GO语言09 同步原语:ync 包让你对并发控制得心应手
- 【C#】简单二维码制作和打印
- 802.11n PHY-MAC层帧结构解析
- 物联卡注销的方法有哪些
- vc++编译时没有问题,运行时出现runtime error的解决办法
- C++读取HDF5文件
热门文章
- Codeforces Round #587 (Div. 3)
- Python内置数据结构--列表
- 排序算法-- 大总结
- Django里自定义用户登陆及登陆后跳转到登陆前页面的实现
- linux Ubuntu apache2 伪静态设置
- DataFormatString={0:格式字符串} 用法
- 自然语言处理笔记2-哈工大 关毅
- 程序基础:数据结构(郝斌讲解)(2)
- 使用 SCons 代替 Makefile 快速构建应用程序
- linux i217 v网卡驱动,手动安装Intel network I217-LM网卡的Linux驱动