AES CCM Python - MarkDing/IoT-Developer-Boot-Camp GitHub Wiki

如何用Python实现AES CCM加解密


1.简介

AES CCM被广泛应用于现代通讯中,在学习过程中需要验证数据的加解密的结果,那么有个方便修改的Python脚本工具就是一个迫切的需求。

2. 实施

我们下面介绍如何实现AES CCM的Python脚本语言

2.1 安装 pycryptodomex

假设你已经安装好了Python3.9(2020.11.11)。在命令行执行

pip3 install pycryptodomex

2.2 Python 脚本编写

打开编辑器,输入以下代码

from Cryptodome.Cipher import AES
import binascii

data = binascii.unhexlify(b'fffd034b50057e400000010000')
nonce = binascii.unhexlify(b'00800000011201000012345678')
key = binascii.unhexlify(b'0953fa93e7caac9638f58820220a398e')

cipher = AES.new(key, AES.MODE_CCM, nonce=nonce)
ciphertext, tag = cipher.encrypt_and_digest(data)
print("ciphertext:", binascii.hexlify(ciphertext))

cipher = AES.new(key, AES.MODE_CCM, cipher.nonce)
decrptdata = cipher.decrypt_and_verify(ciphertext, tag)
print("decrptdata:",binascii.hexlify(decrptdata))

其中data变量是你要加解密的源数据;nonce在密码学中是一个只被使用一次的任意或非重复的随机数值; Key是用来加密的密钥。

2.3 验证

这里我们采用了蓝牙Mesh协议spec里面的样本数据来验证我们的脚本运行是否正确,如下图所示。

运行脚本,输出结果显示加密后和解密后的数据与spec上的数值完全一致。

ciphertext: b'b5e5bfdacbaf6cb7fb6bff871f'
decrptdata: b'fffd034b50057e400000010000'

3. 总结

至此我们已经介绍了如何用Python脚本语言来轻松验证AES CCM的加解密结果,对于我们深入了解通讯协议内容更有帮助。

本篇作者

Mark Ding, 现居住在深圳的物联网开发者。 他高度关注物联网生态系统,对于如何把复杂的技术问题通过简单的方式传递给物联网开发者充满浓厚的兴趣。他和他的小伙伴们建立了TorchIoTBootCamp小组,贡献了大量关于Zigbee, Bluetooth, Z-Wave, 无线硬件,智能音箱,云服务的文章,发表到GitHub和Zhihu等知识分享站点,并创作了大量的物联网课程视频发布到Bilibili,YouTube等视频网站。
⚠️ **GitHub.com Fallback** ⚠️