????????写这篇AES文章也是有件趣事,有位小伙伴发了段密文,看看谁解密速度快,学过Python的小伙伴一下子就解开来了,内容也挺有趣的。 ????????原来加解密也可以这么有趣,虽然看起来很枯燥!
【????挑战谁最快解密这个密文????】
- 温馨提示:
选项 |
值 |
AES加密模式 |
CBC |
填充 |
pkcs |
数据块 |
128位 |
密码 |
my_python_key_20230220ABC_ComeOn |
偏移量 |
python1234567890 |
输出 |
hex |
字符集 |
uft编码(unicode编码) |
【加密串:a5e83e3ad027dd2ce1f57a85cfb170f423f569cad3307b7766ea586c9b8c02725f5771664b25c1205f14567f04f906f5095dae85ee241c14fdc188cbe9e6425c3267a10d95b1f6ec63dff96dd519a06e0e6f0ea1c906dd79902cdd57517658d00cd5a5fe93b782582c7968f9b917495af50c7376dc9157fce048db2b72ddcf1deda7f66658fadb50f7cee0b024b2ad0c】
1、认识AES
1.1、全称
Advanced Encryption Standard,高级加密标准
1.2、简介
AES,是一种最常见的对称加密算法。 它的特点是分组加密,每一组是16字节,是目前主流的高级加密算法
1.3、对称加密
对称加密算法使用了相同的密钥进行加密和解密,它的特点就是速度快计算量小,是最常用的加密方式以及各种安全技术应用的基础
1.4、密钥
密钥支持16位和32位,必须正确设置长度,否则会报错。 加密和解密使用的密钥都是相同的,所以在实际使用时,传输肯定是密文,密钥是不允许传输,只有接收方和发送方知道密钥。 如果实在需要把密文也要在网络上传输,那么就需要通过非对称加密方式加密密钥。否则泄露密钥,那密文就毫无保密作用。
1.5、加密函数
设密钥为Key,明文为Plaintext,密文Ciphertext,加密函数名Encryption,函数如下 C=E(K,P)
1.6、解密函数
设密钥为Key,明文为Plaintext,密文Ciphertext,解密函数名Decrypt,函数如下 P=D(K,C)
1.7、非对称加解密
和对称加解密算法相反,它是使用了不同的密钥进行加解密,它的特点就是速度非常慢破解难度大,适合网络上偶尔临时传输。 它常见的算法有RSA、ECC和EIGamal
1.8、简单结构说明
除了第一轮加密,其他轮次都是循环加密
AES支持的长度:128、192、256,AES128/AES192/AES256,特点就是位数长安全性高性能低,反之安全性低性能高。
1.9、加密模式
ECB模式和CBC模式是最常用的两种模式,除了ECB不需要加初始值,其他模式都需要加
编号 |
模式 |
说明 |
1 |
ECB Electronic Code Book Mode |
常用的模式之一 不需要加偏移量或初始值 |
2 |
CBC Cipher Block Chaining Mode |
常用的模式之一 需要加偏移量或初始值 |
3 |
CFB Cipher Feedback Mode |
需要加偏移量或初始值 |
4 |
OFB Output Feedback Mode |
需要加偏移量或初始值 |
5 |
CTR Counter Mode |
需要加偏移量或初始值 |
6 |
PCBC Propagating Cipher Block Chaining Mode |
需要加偏移量或初始值 |
????原则:Write Less Do More!
????简介:一只喜欢全栈方向的程序员,专注基础和实战分享,欢迎咨询,尽绵薄之力答疑解惑!
2、基础信息
2.1、安装模块
安装pycryptodome模块, 由于pycrypto模块为第三方库,已经停止多年不更新和维护了,这个时候pycryptodome模块就来了,它是之前模块的扩展,用法和之前一样。
2.2、查看目录
查看Python安装目录, 由于小编这里用的是VS开发工具,默认安装的Python路径为如下目录 具体查看Python版本,可以浏览点击此篇文章【python】基础学习系列之查看版本(1)
2.3、注意点
默认在windows环境下安装,pycryptodome安装的路径如下,
温馨提示,可能在其他环境安装文件夹是小写需要改为大写,正确路径和命名如下,Crypto
2.4、进制转换
1)binascii.b2a_hex 将字符串转为十六进制,得到的字符串是是原数据长度的两倍,如下
- 引用方式一
- 引用方式二
2)binascii.a2b_hex
3、加解密
3.1、加密代码
3.2、解密代码
4、常见情况
1)使用16位长度密钥解析32位长度密文会报错,提示如下
'utf-8' codec can't decode byte 0x82 in position 2: invalid “utf-8”编解码器无法解码位置2中的字节0x82:无效
2)使用不正确长度密钥,提示如下
Incorrect AES key length (19 bytes) AES密钥长度不正确(19字节),正确长度是16和32
5、一图总结
【挑战谁最快解密这个密文:a5e83e3ad027dd2ce1f57a85cfb170f45d5ce9f8e29dfb18c6fbaab26ee56e980c8da839cb63fd9620107bd19b9cb8336ebc43052aad19784ceb8e32839a9ecfb1f12730541f40e58aab9017b2fdec1e1bcb17e8de4a417323f56ffc50e0d13c3651b032bbcf1fe1294142f76b322652381f86fa0d60069ccfda5cc720270f2199f2e1cfed559c9766d580fba2386a8a2873c82ee752befbea04c66e8b8574653e611ee7d423b409ea238448639a17d1f4bec72dde1f2cc6a6b1a6c627700a28】
????????不管多忙,都要抽出时间来写博客,沉淀一些经验和感受!欢迎小伙伴交流学习,技术碰撞,也欢迎小伙伴加入小5的个人圈,分享个人十年经验和答疑解惑! 学习Python也有一年多了,个人的学习方式比较注重实在,因为有C#语言的基础,所以很多原理以及解题思路都是想通的!