文章目录

  • 背景
  • 测试数据
  • 代码
  • 遗留问题
  • 补充(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

说明:

  1. 为了使用 AES 模块,需要安装 pycryptodome

  2. binascii.unhexlify(hexstr) :返回由十六进制字符串 hexstr 表示的二进制数据。 hexstr 必须包含偶数个十六进制数字(可以是大写或小写),否则会引发 Error异常。

  3. 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加密解密相关推荐

  1. windows中使用Python进行AES加密解密-文本文件加密工具

    之前的文章http://blog.csdn.net/u013578500/article/details/77905924 简单介绍了一下使用PyCrypto模块实现对字符串的加密解密,里面有提到我利 ...

  2. python 加密解密_python实现AES加密解密

    本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原 ...

  3. aes加密算法python语言实现_C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]...

    原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...

  4. AES加密解密python实现

    1.前言 关于现代密码学算法,可以查看以下博客全面了解 CISSP考试要求里的"应用密码学"内容辅助记忆趣味串讲_晓翔仔的博客-CSDN博客 AES的细节知识,可以查阅 AES加密 ...

  5. Python crypto模块实现RSA和AES加密解密

    Python crypto模块实现RSA和AES加密解密 Python的crypto是用于RSA加密解密,AES加密解密的. 一.RSA和AES简介 RSA加密算法是一种非对称加密算法.RSA 是19 ...

  6. python AES加密解密

    AES,是美国联邦政府采用的一种加密技术,AES有几个模式,其中CBC模式是公认的安全性最好的模式,被TLS所采用. 加密与解密双方需确定好key,key的长度可以是16位,24位,32位中的一个,分 ...

  7. Python实现AES加密进行PKCS5Padding的填充

    Python实现AES加密进行PKCS5Padding的填充 (1)Python 需要导入的模块 (2)AES加密代码 (3)AES解密代码 (4)测试代码 (5)测试结果

  8. JS逆向加解密——python 实现AES加解密

    前言 写爬虫项目,做JS逆向或者APP逆向时,经常遇到网站的很多参数都经过AES加密解密,用python实现AES加解密是非常简单的,免去了扣JS代码,并且实现格式固定,所以本文提供实现好的AES加解 ...

  9. python实现AES加解密文档里英文字符串

    python实现AES加解密文档里英文文章 AES加解密文档里英文字符串 英文文档中也包含了空格与回车符 加密过程 首先读取文件中的内容 将文档中的内容读取,然后将其赋予你申请的变量 在我的实验中我的 ...

最新文章

  1. 【基于XML方式】Spring整合Kafka
  2. Git笔记(23) 不同角色的贡献
  3. 张雪峰考研计算机怎么选学校,考研该如何选择学校?张雪峰老师妙语连珠
  4. 第二章 ASP.NET MVC (控制器向视图传递值(二))
  5. iPhone/iPad/iPod touch编程时版本区分
  6. oracle jde优势介绍,Oracle_JDE_EnterpriseOne模块的详细功能介绍
  7. Android SwipeRefreshLayout官方下拉刷新控件介绍(与知乎Android客户端下拉刷新一样!!)
  8. MFC版 黄金矿工 游戏开发记录
  9. 快应用是什么软件?快应用有什么用?
  10. 活动回顾丨研发效能度量线下沙龙圆满举办
  11. jquery获取兄弟节点
  12. 使用SCRAPY框架获取网易云排行榜歌单
  13. SqlDataReader转换为DataTable
  14. 朋友问我:电脑连接不上WIFI,显示无法连接到这个网络,怎么解决?
  15. 通关GO语言09 同步原语:ync 包让你对并发控制得心应手
  16. 【C#】简单二维码制作和打印
  17. 802.11n PHY-MAC层帧结构解析
  18. 物联卡注销的方法有哪些
  19. vc++编译时没有问题,运行时出现runtime error的解决办法
  20. C++读取HDF5文件

热门文章

  1. Codeforces Round #587 (Div. 3)
  2. Python内置数据结构--列表
  3. 排序算法-- 大总结
  4. Django里自定义用户登陆及登陆后跳转到登陆前页面的实现
  5. linux Ubuntu apache2 伪静态设置
  6. DataFormatString={0:格式字符串} 用法
  7. 自然语言处理笔记2-哈工大 关毅
  8. 程序基础:数据结构(郝斌讲解)(2)
  9. 使用 SCons 代替 Makefile 快速构建应用程序
  10. linux i217 v网卡驱动,手动安装Intel network I217-LM网卡的Linux驱动