速通python加密之AES加密

AES加密

AES加密(Advanced Encryption Standard,高级加密标准)是目前全球公认的最安全、应用最广泛的对称加密算法之一,于2001年被美国国家标准与技术研究院(NIST)确定为替代DES的标准加密算法,目前在金融、通信、军事等安全敏感领域被广泛采用。

AES加密的核心特点:

  1. 对称加密特性
    加密和解密使用同一把密钥,密钥管理相对简单(但需确保密钥安全传输和存储)。

  2. 密钥长度可选
    支持3种密钥长度:128位、192位、256位(对应加密强度依次提升),其中128位AES已能满足绝大多数场景的安全需求,256位则常用于高安全级别场景(如金融、军事)。

  3. 分组加密模式
    AES是分组加密算法,将明文按固定长度(128位,即16字节)分成若干组,逐组加密。实际应用中需结合加密模式(如CBC、GCM、ECB等)处理长文本,其中ECB模式因安全性缺陷(相同明文分组加密后结果相同)不推荐,GCM模式因支持认证加密(同时保证机密性和完整性)被广泛使用。

  4. 安全性与效率平衡
    至今未被发现有效的数学破解方法,且加密/解密速度快,适合处理大量数据(如文件加密、数据库加密),兼顾安全性和性能。

加密流程(简化):

  1. 将明文按128位分组(最后一组不足16字节时需填充,如PKCS#7填充)。
  2. 每组明文与密钥通过多轮(128位密钥10轮、192位12轮、256位14轮)复杂运算(替换、移位、混合、加密钥)生成密文分组。
  3. 拼接所有密文分组,得到最终密文。
    解密过程则是加密的逆操作,使用相同密钥和模式还原明文。

应用场景:

  • 数据加密存储:如用户敏感信息(身份证、银行卡号)在数据库中的加密。
  • secure通信:如HTTPS协议中对称加密阶段(AES常作为数据传输的加密算法)、VPN加密通道。
  • 文件加密:如压缩包加密、本地文件加密(如加密硬盘)。

示例(加密):

"""
@File    :03AES.py
@Editor  : 百年
"""
'''
pip install pycrypto 
pip install pycryptodome
对称加密
所谓对称加密就是加密和解密用的是同一个密钥
条件:加密和解密用的是同一个密钥,那么两边就必须拥有相同的钥匙才可以打开
常见的对称加密有aes,des,3des(3des)
'''
# AES'''
长度:
16:AES-128
24:AES-192
32:AES-256
'''
# 导入包 Cipher里边是各种加密器
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad# step1:创建加密器
aes = AES.new(key=b'0123456789abcdef', mode=AES.MODE_CBC, iv=b'0123456789123456')
'''For ``MODE_CBC``, ``MODE_CFB``, and ``MODE_OFB`` it must be 16 bytes long.'''
'''
MODE_ECB 不需要IV
而MODE_CBC需要IV
IV长度为16
'''# step2:加密一段数据
s = '你好,世界,hello world'bs = s.encode('utf-8')  # important:注意传入的是字节
bs = pad(bs, 16)  # 进行填充
bs = aes.encrypt(bs)
try:print(bs)# b' A\x84\x9dG\x02\xb5\xb1\xed\xc9\xb5jt\x85T}\xd9\x81{.tG\xf4Ag\xfam\xda\\\xb80\x01'# 加密后的结果是杂乱无章的字节
except BaseException as e:print(e)# ValueError: Data must be padded to 16 byte boundary in CBC mode# 数据必须是16的倍数,所以需要填充到16的倍数# 加密完的字节也是不能够直接发送给服务器的,所以要将字节转换为服务器能够识别的字符串
# 也就用到了base64编码
import base64res = base64.b64encode(bs).decode()
print(res)
# IEGEnUcCtbHtybVqdIVUfdmBey50R/RBZ/pt2ly4MAE=

示例(解密)

"""
@File    :AES解密.py
@Editor  : 百年
"""
#因为是对称加密所以密钥模式以及iv都得是一样的
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad #有补长度就有反操作raw = 'IEGEnUcCtbHtybVqdIVUfdmBey50R/RBZ/pt2ly4MAE='#将数据还原成之前的字符串格式
aes = AES.new(key=b'0123456789abcdef',mode=AES.MODE_CBC,iv=b'0123456789123456')#注意如果想还原那么就得将其转换为字节
import base64
b64s = base64.b64decode(raw)#解密之后unpaddecs = aes.decrypt(b64s)res = unpad(decs,16)
print(res.decode('utf-8'))
# 你好,世界,hello world
'''
解密和加密的步骤刚好是反着来的'''#important:
'''
有时候有的网页会把IV写成16进制的数字以0x开头  
例如0xadifeabb1aifuoaea2
这时候就需要
import binascii
a2b_hex()可以将16进制数字转换为字节
binascii.a2b_hex(去掉0x的剩余段adifeabb1aifuoaea2)
b2a_hex()可以将字节转换为16进制数字
binascii.b2a_hex()
其实区分iv到底是16进制还是base64字符串有很好的办法
就是看组成,因为0x的字母是a-f,所以绝对不可能有大于f的出现'''

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916411.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 对象秒变 Map:字段自由伸缩的优雅实现

前言 在开发中,我们常常需要把对象转成 Map 格式,用于序列化、传输、展示,甚至硬塞给某些第三方框架吃进去再吐出来。乍一看很简单,字段多起来后就像打翻调色盘,维护起来一不小心就翻车。想优雅地搞定这事,必须有一套稳妥、可扩展的方案,才能写出让同事膜拜、领导点赞、…

激光雷达-相机标定工具:支持普通相机和鱼眼相机的交互式标定

激光雷达-相机标定工具:支持普通相机和鱼眼相机的交互式标定 前言 在自动驾驶、机器人导航等领域,激光雷达和相机的标定是一个基础而重要的问题。准确的标定结果直接影响后续的感知算法性能。本文将介绍一个开源的激光雷达-相机标定工具,支持…

linux shell从入门到精通(二)——变量操作

1.什么是变量变量在许多程序设计语言中都有定义,与变量相伴地有使用范围地定义。Linux Shell也不例外。变量,本质上就是一个键值对。例如:str“hello”就是将字符串值“hello”赋予键str。在str地使用范围内,我们都可以用str来引用…

[Linux入门] 初学者入门:Linux DNS 域名解析服务详解

目录 一、域名服务基础:从 “名字” 到 “地址” 的转换 1️⃣什么是域名? 2️⃣什么是 DNS? 3️⃣DNS 用 TCP 还是 UDP? 二、DNS 服务器:各司其职的 “导航站” 1️⃣根域名服务器 2️⃣顶级域名服务器 3️⃣权…

iview表单验证一直提示为空的几个原因?

1.Form上的rules是否配置正确; 2.Form-item的prop是否配置正确; 3.规则的名称和input的v-model是否对应; 4.验证的字段是否响应,新增字段使用this. $set. © 著作权归作者所有,转载或内容合作请联系作者 平台声明&#xff1…

SpringBoot3(若依框架)集成Mybatis-Plus和单元测试功能,以及问题解决

一、Mybatis-Plus集成 新增依赖到父级pom.xml,原先的mybatis依赖可以不动需要注意 mybatis-plus与mybatis版本之间的冲突,不要轻易改动依赖,不然分页也容易出现问题分类顶级pom.xml下面,如果没有引入还是出现报错,在co…

删除远程分支上非本分支的提交记录

要删除远程分支上非本分支的提交记录(即主分支的提交历史),需要使用 Git 的重写历史功能。以下是完整解决方案: 解决方案步骤: 创建干净的新分支(基于主分支最新提交) # 切换到主分支并更新 git…

Flask input 和datalist结合

<input list"categories" name"category" id"category" class"form-control" placeholder"任务分类" required> 这段代码是一个 HTML 输入控件&#xff0c;结合了 <input> 和 <datalist>&#xff0c;用来…

嵌入式分享#27:原来GT911有两个I2C地址(全志T527)

最近在调试全志T527的触摸功能时&#xff0c;发现GT911触摸芯片的I2C地址有时是0x5d&#xff0c;有时又识别成0x14&#xff0c;不知道大家有没有遇到过类似这个情况。虽然最后使用0x5d地址调通了触摸功能&#xff0c;但是一直还是很困惑&#xff0c;为什么会出现0x14和0x5d两个…

Linux运维新人自用笔记(Rsync远程传输备份,服务端、邮箱和客户端配置、脚本)

内容全为个人理解和自查资料梳理&#xff0c;欢迎各位大神指点&#xff01;每天学习较为零散。day24一、Rsync传输文件#安装rsync#-a递归同步&#xff08;包含子目录&#xff09;保留文件权限、所有者、组、时间戳等元数据 #​​-z传输时压缩数据 #​​-v显示详细同步过程 #​​…

以 “有机” 重构增长:云集从电商平台到健康生活社区的跃迁

当电商行业陷入流量争夺的红海&#xff0c;同质化运营模式难以突破增长瓶颈时&#xff0c;云集以从精选电商到有机生活平台的战略转型&#xff0c;开辟出差异化发展路径。其转型并非凭经验决断的孤例&#xff0c;而是建立在对市场趋势的精准研判、用户需求的深度解码&#xff0…

【2025最新版】midjourney小白零基础入门到精通教程!人工智能绘图+AI绘图+AI画图,一键出图教程 (持续更新)

前言 现在市面上相关的AI绘画工具非常多&#xff0c;有6pen.art、Stable Diffusion、DALL.E、Midjourney等。 而MJ就目前而言&#xff0c;它是一款强大的人工智能工具&#xff0c;旨在帮助设计师和创意人员完成各种设计任务。 非常适合我们图像工作者&#xff0c;从 UI 设计到…

2025年渗透测试面试题总结-2025年HW(护网面试) 70(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 2025年HW(护网面试) 70 一、自我介绍 二、同源策略 & 三大漏洞对比解析 1. 同源策略&#xff08;SOP&…

加权卡尔曼滤波

加权卡尔曼滤波融合&#xff0c;它通过给不同传感器或估计结果分配不同的权重&#xff0c;来提高状态估计的精度和可靠性。一、卡尔曼滤波1.状态方程2.观测方程其中&#xff1a;基本方程①状态一步预测②状态估计③滤波增益④一步预测均方差⑤估计均方误差二、加权卡尔曼滤波对…

【世纪龙科技】新能源汽车维护与故障诊断-汽车专业数字课程资源

在职业院校汽车专业教学中&#xff0c;理论与实践脱节、设备投入不足、学生实操能力薄弱等问题长期存在。如何让学生在有限的教学资源下掌握新能源汽车核心技术&#xff1f;如何让教师更高效地开展理实一体化教学&#xff1f;《新能源汽车维护与故障诊断》数字课程资源&#xf…

Windows Server系统安装JDK,一直卡在“应用程序正在为首次使用作准备,请稍候”

一、背景 第二次遇到这个问题了&#xff0c;但是居然没想起来之前遇到过&#xff0c;又问元宝给的答案不对&#xff0c;还没想起来之前收藏过解决方案&#xff0c;这里特别记录一下。 二、问题描述 操作系统是Windows Sever2019&#xff0c;安装JDK时卡住一直过不去&#xff0…

机器学习入门:线性回归详解与实战

线性回归&#xff08;Linear Regression&#xff09;是机器学习中最基础也最常用的算法之一&#xff0c;无论是初学者入门还是实际业务场景&#xff0c;都能看到它的身影。本文将从概念、原理到代码实现&#xff0c;带你全方位了解线性回归。一、什么是线性回归&#xff1f;简单…

第3篇:软链接 mklink /D 教程:轻量缓存目录迁移利器

我们通过诸多实践后将三种链接方案分别独立成篇&#xff0c;可以让不同需求场景的读者精准获取所需内容。下面是回顾我们文章系列策划的三篇博客标题、定位和详细大纲&#xff0c;每篇都围绕一个核心方案展开&#xff0c;具备教学性、实用性和实操性&#xff1a; &#x1f4d8;…

力扣 hot100 Day52

124. 二叉树中的最大路径和 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉…

数据存储:OLAP vs OLTP

下面系统性地进行介绍,包括OLAP数据库的基本概念、特点、常见产品,以及它们在实际工作中的典型应用场景,最后对比与关系型数据库(OLTP)的区别。 一、OLAP数据库是什么? OLAP(Online Analytical Processing,联机分析处理)数据库,主要用于大数据量、多维度、复杂查询与…