关键词:
🍦🍦写这篇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模块就来了,它是之前模块的扩展,用法和之前一样。
# 运行如下命令安装
pip install pycryptodome
# 如下方式引用
from Crypto.Cipher import AES
2.2、查看目录
查看Python安装目录,
由于小编这里用的是VS开发工具,默认安装的Python路径为如下目录
具体查看Python版本,可以浏览点击此篇文章【python】基础学习系列之查看版本(1)
C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Python39_64
2.3、注意点
默认在windows环境下安装,pycryptodome安装的路径如下,
温馨提示,可能在其他环境安装文件夹是小写需要改为大写,正确路径和命名如下,Crypto
2.4、进制转换
1)binascii.b2a_hex
将字符串转为十六进制,得到的字符串是是原数据长度的两倍,如下
- 引用方式一
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-03-09
import binascii
a = 'Python'
print("a字符串值:",a)
# 字符串转为十六进制
b = binascii.b2a_hex(a.encode()) #注意:这里需要转换为编码格式,否则报错
print("b字符串值:",b)
- 引用方式二
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-03-10
from binascii import b2a_hex
a = 'Python'
print("a字符串值:",a)
# 字符串转为十六进制
b = b2a_hex(a.encode()) #注意:这里需要转换为编码格式,否则报错
print("b字符串值:",b)
2)binascii.a2b_hex
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-03-10
from binascii import a2b_hex
a = b'507974686f6e'
print("a十六进制串:",a)
# 十六进制转为字符串
c = a2b_hex(a.decode())
print("c字符串值:",c)
3、加解密
3.1、加密代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-02-20
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
code='utf-8'
offset=b'python1234567890' # 字节
mykey='my_python_key_20230220ABC_ComeOn'
key = mykey.encode(code)
mode = AES.MODE_CBC
# 加16位
def addTo16(txt):
if len(txt.encode(code)) % 16:
add = 16 - (len(txt.encode(code)) % 16)
else:
add = 0
txt = txt + ('\\0' * add)
return txt.encode(code)
# 加密数据函数
def encryptData(text):
# Incorrect AES key length (15 bytes)
text = addTo16(text)
cryptos = AES.new(key, mode,offset)
cipher_text = cryptos.encrypt(text)
return b2a_hex(cipher_text)
# 程序入口
if __name__ == '__main__':
# 加密
text="My Name is Python"
encryptStr = encryptData(text)
print("明文字符串:", text)
print("加密串数据:", encryptStr)
3.2、解密代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-03-09
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
code='utf-8'
offset=b'python1234567890' # 字节
mykey='my_python_key_20230220ABC_ComeOn' # 支持16位和32位长度
key = mykey.encode(code)
mode = AES.MODE_CBC
# 加16位
def addTo16(txt):
if len(txt.encode(code)) % 16:
add = 16 - (len(txt.encode(code)) % 16)
else:
add = 0
txt = txt + ('\\0' * add)
return txt.encode(code)
# 解密数据函数
def decryptData(text):
cryptor = AES.new(key, mode,offset)
plain_text = cryptor.decrypt(a2b_hex(text))
return bytes.decode(plain_text).rstrip('\\0')
# 程序入口
if __name__ == '__main__':
# 加密串
text="06a9c834a3fa7a9774a0e0e319226f7f"
# 解密串
decryptStr = decryptData(text)
print("加密串数据:", text)
print("解密串数据:", decryptStr)
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、一图总结
6、推荐阅读
编号 | 文章标题 |
---|---|
1 | 【Python】输入一个整数n,1<=n<=10,输出一个n层的特定三角形 |
2 | 【华为OD机试题】字符串消消乐 |
3 | 【Python】使用bs4的 |
4 | 【Python】输入一段字母字符串 |
5 | 【Python】编写代码实现指定下标值顺序进行正序和倒序排序算法编程 |
【挑战谁最快解密这个密文:a5e83e3ad027dd2ce1f57a85cfb170f45d5ce9f8e29dfb18c6fbaab26ee56e980c8da839cb63fd9620107bd19b9cb8336ebc43052aad19784ceb8e32839a9ecfb1f12730541f40e58aab9017b2fdec1e1bcb17e8de4a417323f56ffc50e0d13c3651b032bbcf1fe1294142f76b322652381f86fa0d60069ccfda5cc720270f2199f2e1cfed559c9766d580fba2386a8a2873c82ee752befbea04c66e8b8574653e611ee7d423b409ea238448639a17d1f4bec72dde1f2cc6a6b1a6c627700a28】
🍹🍹不管多忙,都要抽出时间来写博客,沉淀一些经验和感受!欢迎小伙伴交流学习,技术碰撞,也欢迎小伙伴加入小5的个人圈,分享个人十年经验和答疑解惑!
学习Python也有一年多了,个人的学习方式比较注重实在,因为有C#语言的基础,所以很多原理以及解题思路都是想通的!
大奖等你来拿!hmscore线上codelabs挑战赛第二期开始
...中,期待开发者们带来更多精彩创作,丰厚大奖等你来拿!关于挑战赛在1024程序员节即将到来之际,HMSCore准备了一场线上Cod 查看详情
大奖等你来拿!hmscore线上codelabs挑战赛第二期开始
...中,期待开发者们带来更多精彩创作,丰厚大奖等你来拿!关于挑战赛在1024程序员节即将到来之际,HMSCore准备了一场线上Cod 查看详情
瓜分60万现金大奖,云原生编程挑战赛等你来挑战!
简介:2021年第二届云原生编程挑战赛目前正在火热招募中。本次大赛由阿里云、Intel主办,阿里云云原生、阿里云天池承办。自2015年开始,大赛已经成功举办了六届,并从2020年开始升级为云原生编程挑战赛,... 查看详情
美团高校挑战赛|50万奖金池,“ctf+挖洞”双赛道……等你来!
https://bm.ichunqiu.com/meituan热血赛事,即刻打响!勇者携战队,我们赛场上见!关注公众号【美团安全应急响应中心】持续关注更多有关赛事的精彩资讯 如对比赛有疑问或问题请添加运营人员微信号942761431咨询 期... 查看详情
话题挑战赛开团,千元奖金周边等你来拿
一个人走,可能走的很快,但一群人走,将走的更远,CSDN话题挑战赛第1期正式开赛啦!欢迎各位小伙伴组团开写,以来路作灯,共同成长,展现技术人风采!活动结果已公布在详情页,请... 查看详情
开学总动员!2022华为开发者大赛等你来挑战!
摘要:9月23日开启2022华为开发者大赛“开学季总动员”主题直播活动。金秋开学季,为了吸引更多高校开发者关注与参与华为开发者大赛,华为于9月23日开启2022华为开发者大赛“开学季总动员”主题直播活动。华为... 查看详情
你学习·我奖励,21天学习挑战赛|等你来战
学无止境,习有收获,为了更好地激发大家的学习积极性,CSDN与每一位终身学习者同行,精选平台优质专栏作者带队精准学习,利用高质量专栏学习资源在活动期内限时免费学习,在碎片化的时间修行中... 查看详情
你学习·我奖励,21天学习挑战赛|等你来战
学无止境,习有收获,为了更好地激发大家的学习积极性,CSDN与每一位终身学习者同行,精选平台优质专栏作者带队精准学习,利用高质量专栏学习资源在活动期内限时免费学习,在碎片化的时间修行中... 查看详情
beyondstreamprocessing!第四届实时计算flink挑战赛启动,49万奖金等你来拿!...
BeyondStreamProcessing2022第四届实时计算FLINK挑战赛天池大赛生活中的事件都可以通过实时计算来解决,以Flink为工具解决一个实际问题,成为了今年实时计算Flink挑战赛的赛题。小到日常学习、工作、生活中的点滴琐事,... 查看详情
49万奖金等你来拿!第四届实时计算flink挑战赛启动,beyondstreamprocessing!
BeyondStreamProcessing2022第四届实时计算FLINK挑战赛天池大赛生活中的事件都可以通过实时计算来解决,以Flink为工具解决一个实际问题,成为了今年实时计算Flink挑战赛的赛题。小到日常学习、工作、生活中的点滴琐事,... 查看详情
报名中5g探索深度揭秘5g核心技术与挑战,云+社区开发者大会北京站等你来!
报名渠道(扫描下方二维码)开发者专属福利限量手办现场幸运签到开发者即可获得,早到获奖几率更大幸运抽奖一等奖:1名JBLLIVE650BTNC无线主动降噪智能耳机二等奖:3名JBLGOSMART2音乐魔方二代便携式人工智能音箱三等奖:5名JB... 查看详情
3天学好java,等你来战
最近,知乎上很火的一个帖子,如何看待大学生三天学好Java!我一看还在想,现在大家学习都这么卷了嘛,后面好奇的我向专业老师请教,才发现3天完全可以啊!这就来带你解密3天学好Java的秘密... 查看详情
华为开启2022全球校园ai算法精英赛道百万奖金等你来挑战算法极限
2022鸿蒙开发者赛事之华为全球校园AI算法精英赛道,正式面向全球全日制高等院校及以上在校学生开启报名通道,专项奖励基金超百万人民币。本届大赛由江苏省人工智能学会(JSAI)、华为终端云服务部、华为南京研究所... 查看详情
华为开启2022全球校园ai算法精英大赛百万奖金等你来挑战算法极限
【6月24日,深圳】2022鸿蒙开发者大赛之华为全球校园AI算法精英赛道举办线上启动仪式,正式面向全球全日制高等院校及以上在校学生开启报名通道,专项奖励基金超百万人民币。本届大赛由江苏省人工智能学会... 查看详情
60万大奖等你来瓜分|云原生编程挑战赛lessismore-serverless创新应用赛火热开启中
简介:快来参加比赛吧!云原生编程挑战赛,是由阿里云、Intel主办,阿里云云原生、阿里云天池承办的云原生顶级品牌赛事。自2015年开始,大赛已经成功举办了六届,并从2020年开始升级为首届云原生编... 查看详情
问答开学季:千元奖品和周边大礼包等你来拿
...回答问题,只要参与就有机会获得现金奖励哦!还有超多的CSDN周边奖品等你来拿!一、活动时间2021年9月6日-2021年9月19日,仅限CSDN用户参与二、活动内容活动期间,CSDN用户通过参与问答(点击去问答频道&... 查看详情
开工大吉!美团开放2,200+个岗位,上万机会等你来!
每日互动(个推)2022届校招全面启动!热门技术岗位,等你来!
...;数据类、研发类、算法类......众多热门技术岗位,就等你来!我们邀你一起乘坐“数据智能”号飞船释放技术和代码的巨大能量,向数据智能的星辰大海发起进击!点击下图,立即登船数据智能第一股ÿ 查看详情