网站建设服装在线商城实训报告,上海seo推广,免注册制作网站,有什么网站可以做设计赚钱#x1f366;#x1f366;写这篇AES文章也是有件趣事#xff0c;有位小伙伴发了段密文#xff0c;看看谁解密速度快#xff0c;学过Python的小伙伴一下子就解开来了#xff0c;内容也挺有趣的。 #x1f35f;#x1f35f;原来加解密也可以这么有趣#xff0c;虽然看起… 写这篇AES文章也是有件趣事有位小伙伴发了段密文看看谁解密速度快学过Python的小伙伴一下子就解开来了内容也挺有趣的。 原来加解密也可以这么有趣虽然看起来很枯燥 目录1、认识AES1.1、全称1.2、简介1.3、对称加密1.4、密钥1.5、加密函数1.6、解密函数1.7、非对称加解密1.8、简单结构说明1.9、加密模式2、基础信息2.1、安装模块2.2、查看目录2.3、注意点2.4、进制转换3、加解密3.1、加密代码3.2、解密代码4、常见情况5、一图总结6、推荐阅读【挑战谁最快解密这个密文】
温馨提示
选项值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函数如下 CE(K,P)
1.6、解密函数
设密钥为Key明文为Plaintext密文Ciphertext解密函数名Decrypt函数如下 PD(K,C)
1.7、非对称加解密
和对称加解密算法相反它是使用了不同的密钥进行加解密它的特点就是速度非常慢破解难度大适合网络上偶尔临时传输。 它常见的算法有RSA、ECC和EIGamal
1.8、简单结构说明
除了第一轮加密其他轮次都是循环加密 AES支持的长度128、192、256AES128/AES192/AES256特点就是位数长安全性高性能低反之安全性低性能高。
1.9、加密模式
ECB模式和CBC模式是最常用的两种模式除了ECB不需要加初始值其他模式都需要加
编号模式说明1ECBElectronic Code Book Mode常用的模式之一不需要加偏移量或初始值2CBCCipher Block Chaining Mode常用的模式之一需要加偏移量或初始值3CFBCipher Feedback Mode需要加偏移量或初始值4OFBOutput Feedback Mode需要加偏移量或初始值5CTRCounter Mode需要加偏移量或初始值6PCBCPropagating Cipher Block Chaining Mode需要加偏移量或初始值原则Write Less Do More! 简介一只喜欢全栈方向的程序员专注基础和实战分享欢迎咨询尽绵薄之力答疑解惑 2、基础信息
2.1、安装模块
安装pycryptodome模块 由于pycrypto模块为第三方库已经停止多年不更新和维护了这个时候pycryptodome模块就来了它是之前模块的扩展用法和之前一样。
# 运行如下命令安装
pip install pycryptodome# 如下方式引用
from Crypto.Cipher import AES2.2、查看目录
查看Python安装目录 由于小编这里用的是VS开发工具默认安装的Python路径为如下目录 具体查看Python版本可以浏览点击此篇文章【python】基础学习系列之查看版本1
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python39_642.3、注意点
默认在windows环境下安装pycryptodome安装的路径如下 温馨提示可能在其他环境安装文件夹是小写需要改为大写正确路径和命名如下Crypto
2.4、进制转换
1binascii.b2a_hex 将字符串转为十六进制得到的字符串是是原数据长度的两倍如下
引用方式一
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-03-09import binasciia Python
print(a字符串值,a)# 字符串转为十六进制
b binascii.b2a_hex(a.encode()) #注意这里需要转换为编码格式否则报错
print(b字符串值,b)
引用方式二
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-03-10from binascii import b2a_hexa Python
print(a字符串值,a)# 字符串转为十六进制
b b2a_hex(a.encode()) #注意这里需要转换为编码格式否则报错
print(b字符串值,b) 2binascii.a2b_hex
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-03-10from binascii import a2b_hexa b507974686f6e
print(a十六进制串,a)# 十六进制转为字符串
c a2b_hex(a.decode())
print(c字符串值,c)3、加解密
3.1、加密代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-02-20from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hexcodeutf-8
offsetbpython1234567890 # 字节
mykeymy_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 0txt 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__:# 加密textMy Name is PythonencryptStr encryptData(text)print(明文字符串:, text) print(加密串数据:, encryptStr)3.2、解密代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-03-09from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hexcodeutf-8
offsetbpython1234567890 # 字节
mykeymy_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 0txt 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__:# 加密串text06a9c834a3fa7a9774a0e0e319226f7f# 解密串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】输入一个整数n1n10输出一个n层的特定三角形2【华为OD机试题】字符串消消乐3【Python】使用bs4的4【Python】输入一段字母字符串5【Python】编写代码实现指定下标值顺序进行正序和倒序排序算法编程
【挑战谁最快解密这个密文a5e83e3ad027dd2ce1f57a85cfb170f45d5ce9f8e29dfb18c6fbaab26ee56e980c8da839cb63fd9620107bd19b9cb8336ebc43052aad19784ceb8e32839a9ecfb1f12730541f40e58aab9017b2fdec1e1bcb17e8de4a417323f56ffc50e0d13c3651b032bbcf1fe1294142f76b322652381f86fa0d60069ccfda5cc720270f2199f2e1cfed559c9766d580fba2386a8a2873c82ee752befbea04c66e8b8574653e611ee7d423b409ea238448639a17d1f4bec72dde1f2cc6a6b1a6c627700a28】 不管多忙都要抽出时间来写博客沉淀一些经验和感受欢迎小伙伴交流学习技术碰撞也欢迎小伙伴加入小5的个人圈分享个人十年经验和答疑解惑 学习Python也有一年多了个人的学习方式比较注重实在因为有C#语言的基础所以很多原理以及解题思路都是想通的