【Python】AES加解密代码,文章还有加密串等你来解密,等你来挑战
🍦🍦写这篇AES文章也是有件趣事,有位小伙伴发了段密文,看看谁解密速度快,学过Python的小伙伴一下子就解开来了,内容也挺有趣的。
🍟🍟原来加解密也可以这么有趣,虽然看起来很枯燥!
目录
- 1、认识AES
- 1.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,函数如下
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-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)
2)binascii.a2b_hex
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-03-10from binascii import a2b_hexa = b'507974686f6e'
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_hexcode='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 = 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__':# 加密text="My Name is Python"encryptStr = 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_hexcode='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 = 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__':# 加密串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#语言的基础,所以很多原理以及解题思路都是想通的!
相关文章:

【Python】AES加解密代码,文章还有加密串等你来解密,等你来挑战
🍦🍦写这篇AES文章也是有件趣事,有位小伙伴发了段密文,看看谁解密速度快,学过Python的小伙伴一下子就解开来了,内容也挺有趣的。 🍟🍟原来加解密也可以这么有趣,虽然看起…...
代码随想录【Day34】| 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
1005. K 次取反后最大化的数组和 题目链接 题目描述: 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。&…...

Java性能调优杀手锏JMH
JMH简介 JMH(Java Microbenchmark Harness)由 OpenJDK/Oracle 里面那群开发了 Java编译器的大牛们所开发,是一个功能强大、灵活的工具,它可以用于检测和评估Java应用程序的性能,主要目的是测量Java应用程序的性能,尤其是在多线程…...

实现excle表上传生成echarts图
代码如下html <!--这是一个网上关于读取Excel最经典的代码--> <!DOCTYPE html> <html><head><meta charset"utf-8"><title>ECharts</title><!-- 引入 echarts.js --><!-- <script src"newjs/js/incubato…...

python代码如何打包
网上的文章对小白都不太友好呀,讲得都比较高大上,本文章就用最简单的方式来教会大家如何打包。既然各位已经学习到了python打包了, 深适度应该跟我查不多。 注意事项: 1. 这个插件只能打包 mac 、win系统运行的文件,也…...

MyBatis学习笔记(十二) —— MyBatis的逆向工程
12、MyBatis的逆向工程 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源: Java实体类Mappe…...

4.Elasticsearch深入了解
4.Elasticsearch深入了解[toc]1.Elasticsearch架构原理Elasticsearch的节点类型在Elasticsearch主要分成两类节点,一类是Master,一类是DataNode。Master节点在Elasticsearch启动时,会选举出来一个Master节点。当某个节点启动后,然…...
【HashSet】| 深度剥析Java SE 源码合集Ⅲ
目录一. 🦁 HashSet介绍1.1 特点1.2 底层实现二. 🦁 结构以及对应方法分析2.1 结构组成2.1.1 源码实现2.1.2 成员变量及构造方法2.2 常用的方法2.2.1 添加add(E e)方法2.2.2 删除remove(Object o)方法三. 最后想说一. 🦁 HashSet介绍 1.1 特…...

你了解线程的状态转换吗
本文概述: 讲述线程的六种状态. 你可能已经了解了六种状态, 但是你知道 sleep 被唤醒之后, wait ()被 notify 之后进入了什么状态吗? 本文只是开胃小菜, 你看看下一篇文章对你有没有帮助. 一共有六种状态: New 新建状态Runnable 运行状态Blocked 阻塞状态Waiting 等待状态Tim…...

MyBatis-Plus联表查询的短板,该如何解决呢
mybatis-plus作为mybatis的增强工具,它的出现极大的简化了开发中的数据库操作,但是长久以来,它的联表查询能力一直被大家所诟病。一旦遇到left join或right join的左右连接,你还是得老老实实的打开xml文件,手写上一大段…...

吲哚菁绿-巯基,ICG-SH,科研级别试剂,吲哚菁绿可用于测定心输出量、肝脏功能、肝血流量,和对于眼科血管造影术。
ICG-THIOL,吲哚菁绿-巯基 中文名称:吲哚菁绿-巯基 英文名称:ICG-THIOL 英文别名:ICG-SH 性状:绿色粉末 溶剂:溶于二氯甲烷等其他常规有机溶剂 稳定性:冷藏保存,避免反复冻融。 存储条件&…...
深度剖析JavaOptional类
Java Optional 类 Optional类在 Java 8中被加了进来,提供了一种处理业务逻辑想要的值可能没有出现(null)也可能出现的情况,可能直到目前,我们还是用null 来表示业务值不存在的情况,但是这可能导致空指针异常,Java 8新添加 Optional类可以从一定程度上来解决这个问题。 O…...

平面设计软件Corel CDR2023又开始放大招啦,CorelDRAW Graphics Suite 2023有哪些新增功能?
CorelDRAW 2023中文版即将于2023年3月14日,在苏州举行线上直播的2023新品发布会,本次发布会主题为“设计新生力,矢量新未来”。 发布会邀请思杰马克丁公司领导、Corel 中国区总经理分享思杰与 Corel 的合作模式及在 CorelDRAW 产品上推动历程…...
初学torch【报错:expected scalar type double but found float、rmse】
目录 一、inout 二、expected scalar type double but found float 报错 三、pytorch中回归评价rmse: 一、inout torch网络训练,输入需要转换为tensor格式: import torch import numpy A torch.arange(12, dtypetorch.float32).reshape((…...

金三银四、金九银十 面试宝典 JAVASE八股文面试题 超级无敌全的面试题汇总(接近3万字的面试题,让你的JAVA语法基础无可挑剔)
JavaSE八股文 - 面试宝典 一个合格的 计算机打工人 ,收藏夹里必须有一份 JAVA八股文面试题 ,特别是即将找工作的计算机人,希望本篇博客对你有帮助! 本文参考了诸多大佬的面试题帖子,ps:白大锅、哪吒、英雄…...

数据结构:链式二叉树初阶
目录 一.链式二叉树的逻辑结构 1.链式二叉树的结点结构体定义 2.链式二叉树逻辑结构 二.链式二叉树的遍历算法 1.前序遍历 2.中序遍历 3.后序遍历 4.层序遍历(二叉树非递归遍历算法) 层序遍历概念: 层序遍历算法实现思路: 层序遍历代码实现: 三.链式二叉树遍历算…...
公式编写1000问9-12
9.问: 买入:日线创100日新高 ,周线(5周)BIAS>10 卖出:2日收盘在30线下方 注:买卖都只要单一信号即可,不要连续给出信号 我今天才开始学习编写,可是没有买入信号,不知道哪错了? B1…...

C++11:类的新功能和可变参数模板
文章目录1. 新增默认成员函数1.1 功能1.2 示例2. 类成员变量初始化3. 新关键字3.1 关键字default3.2 关键字delete补充3.3 关键字final和override4. 可变参数模板4.1 介绍4.2 定义方式4.3 展开参数包递归展开参数包优化初始化列表展开参数包逗号表达式展开参数包补充5. emplace…...
【Java学习笔记】15.Java 日期时间(1)
Java 日期时间 java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。 第一个构造函数使用当前日期和时间来初始化对象。 Date( )第二个构造函数接收一个参数,该参数是从 1970 年 1 月 1 日起的毫秒数。 Date(long …...

在ROS2中,通过MoveIt2控制Gazebo中的自定义机械手
目前的空余时间主要都在研究ROS2,最终目的是控制自己用舵机组装的机械手。 由于种种原因,先控制Gazebo的自定义机械手。 先看看目前的成果 左侧是rviz2中的moveit组件的机械手,右侧是gazebo中的机械手。在moveit中进行路径规划并执行后&#…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...