还有加密串等你来解密,等你来挑战(代码片段)

小5聊 小5聊     2023-03-12     645

关键词:

🍦🍦写这篇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不需要加初始值,其他模式都需要加

编号模式说明
1ECB
Electronic Code Book Mode
常用的模式之一
不需要加偏移量或初始值
2CBC
Cipher Block Chaining Mode
常用的模式之一
需要加偏移量或初始值
3CFB
Cipher Feedback Mode
需要加偏移量或初始值
4OFB
Output Feedback Mode
需要加偏移量或初始值
5CTR
Counter Mode
需要加偏移量或初始值
6PCBC
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届校招全面启动!热门技术岗位,等你来!

...;数据类、研发类、算法类......众多热门技术岗位,就等你来!我们邀你一起乘坐“数据智能”号飞船释放技术和代码的巨大能量,向数据智能的星辰大海发起进击!点击下图,立即登船数据智能第一股ÿ 查看详情