AES加密,什么时候需要填充


AES(高级加密标准)是一种分组密码,它将数据按照固定的块大小进行加密。AES标准规定了128位(16字节)的块大小。当使用AES加密时,如果输入的数据长度不是16字节的整数倍,就需要对最后一个数据块进行填充(Padding),以确保所有要加密的数据都能够被完整地放入到这些固定大小的块中。
填充在以下情况下是必要的:
1. **数据长度不匹配**:当待加密的明文长度不是AES块大小(16字节)的整数倍时,必须添加额外的数据来补足最后一个块。即使最后一个块只缺少一个字节,也需要填充整个块,因为AES不允许部分填充。
2. **特定模式要求**:某些操作模式(如CBC、CFB、OFB和CTR等)明确要求输入的数据长度为块大小的整数倍。特别是CBC模式,这是最常用的AES操作模式之一,它总是需要填充。
3. **安全考虑**:即使是对于那些不要求严格块对齐的操作模式(如流模式CTR),为了保持一致性并且避免信息泄露(例如通过分析消息长度),通常也会选择对所有消息进行填充。
常见的填充方式包括PKCS#7(也称为PKCS#5,尽管它们有细微区别)、ANSI X.923和ISO 10126等。其中,PKCS#7是最常用的一种,它简单且有效,适用于任何块大小,并且易于实现和验证。
### PKCS#7 填充示例
假设我们有一个14字节的消息,而AES的块大小是16字节。根据PKCS#7规则,我们需要填充两个字节,每个字节的值都是`0x02`(即填充的数量)。因此,填充后的消息将是原始消息加上两个`0x02`字节。
```plaintext
原始消息: [14 bytes of data]
填充后: [14 bytes of data] + [0x02] + [0x02]
```
同样地,如果消息正好是16字节的倍数,那么还需要再添加一个完整的块作为填充,每个字节都设置为该块的大小(在这个例子中是`0x10`或16)。
### 注意事项
- **解密时去除填充**:在解密过程中,接收方需要能够正确识别并移除填充内容,这样才能恢复原始消息。这通常是在解密过程的最后一步完成的。
- **填充攻击**:一些填充方案可能使系统容易受到填充 oracle 攻击。因此,在设计协议时应考虑到这一点,并采取措施减轻潜在风险,比如使用认证加密(Authenticated Encryption, AEAD)模式,它可以同时提供保密性和完整性保护。
总之,正确的填充处理对于保证AES加密的有效性和安全性至关重要。
AES(高级加密标准)的块大小是固定的,为128位(16字节),这是由AES算法本身定义的标准,并且不能更改。AES并不支持1024位或其他非128位的块大小。
AES有三种密钥长度:128位、192位和256位,分别对应AES-128、AES-192和AES-256。这些不同的密钥长度影响的是加密的安全强度,而不是块大小。无论使用哪种密钥长度,AES的块大小始终是128位。
如果你提到的“块大小”是指密钥大小,那么你可以选择上述提到的三种密钥大小之一。例如,使用AES-256意味着你将使用256位的密钥来加密数据,但每个数据块仍然会被分成128位进行处理。
如果你需要更大的安全强度或有其他特定需求,可以考虑以下几点:
- **增加密钥长度**:如前所述,可以选择更长的密钥长度(AES-192 或 AES-256)以增强安全性。
- **多层加密**:在某些情况下,可以对数据进行多次加密,但这会增加计算开销,并不是推荐的做法,除非确实有必要。
- **其他算法**:如果AES的特性不满足你的需求,也可以研究其他加密算法,比如Twofish或者Camellia等,它们也有不同的块大小和密钥长度选项。
对于大多数应用来说,AES提供的128位块大小已经足够,并且其性能和安全性都得到了广泛的认可。如果你认为需要超过128位的块大小来满足某种特定要求,可能需要重新评估你的安全模型或寻找更适合的解决方案。
AES加密,什么时候需要填充的更多相关文章
- AES加密补位填充的一个问题
AES加密支持多种填充方式,NoPadding,PKCS5Padding,ISO10126Padding,ZerosPadding,PKCS7Padding. 其中PKCS7Padding 就是数据个 ...
- 参考别人的代码写的aes加密,记录一下(AES,ECB模式,填充PKCS5Padding,数据块128位,偏移量无,以hex16进制输出)
package org.jimmy.autosearch2019.test; import java.security.SecureRandom; import javax.crypto.Cipher ...
- Android数据加密之Aes加密
前言: 项目中除了登陆,支付等接口采用rsa非对称加密,之外的采用aes对称加密,今天我们来认识一下aes加密. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes ...
- nodejs与javascript中的aes加密
简介 1.aes加密简单来说,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.高级加密标准已然成为对称密钥加 ...
- AES加密解密
AES简介 美国国家标准技术研究所在2001年发布了高级加密标准(AES).AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准. 根据使用的密码长度,AES最常见的有3种密钥方案,用以适应 ...
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]
原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...
- Java 环境下使用 AES 加密的特殊问题处理
在 Java 环境下使用 AES 加密,在密钥长度和字节填充方面有一些比较特殊的处理. 1. 密钥长度问题 默认 Java 中仅支持 128 位密钥,当使用 256 位密钥的时候,会报告密钥长度错误 ...
- AES加密 16进制与二进制转换
import java.security.Key; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax ...
- 有关AES加密的问题
遇到一个项目,需要用AES加密密码,android的已经写好了,java源码: private static final String AES_OPTIONS = "AES/ECB/PKCS ...
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
原文:AES加密CBC模式兼容互通四种编程语言平台[PHP.Javascript.Java.C#] 由于本人小菜,开始对AES加密并不了解,在网络上花了比较多时间查阅资料整理: 先简单从百度找来介绍: ...
随机推荐
- 红色教育软件需求分析 NABCD
N(need) 红色教育指在以红色作为时代精神内涵的象征.务实的落点在于教育.要呼唤有志青年忧国忧民.挑战自我.超越自我.挑战极限.奉献社会的崇高精神.而我们大学生作为实现中华民族伟大复兴的有生力量, ...
- HarmonyOS运动开发:深度解析文件预览的正确姿势
鸿蒙核心技术##运动开发##Core File Kit(文件基础服务)##Preview Kit(文件预览服务)# 在 HarmonyOS 开发中,文件预览功能是一个常见的需求,尤其是在处理用户上传的 ...
- String在内存中如何分布
一.设计思想及原理 设计思想 1.字符串分配和其他的对象分配一样,耗费高昂的时间与空间代价,作为最基础的数据类型,大量频繁的创建字符串,极大程度地影响程序的性能. 2.JVM为了提高性能和减少内存开销 ...
- 袋鼠云数栈UI5.0体验升级背后的故事:可用性原则与交互升级
最近,我们袋鼠云的UED部⻔小伙伴们,不声不响地⼲了⼀件⼤事--升级了全新设计语言「数栈UI5.0」. 众所周知,用户在使用产品时,是一个动态的过程,用户和产品之间进行交互的可用性,能否让用户愉悦.快 ...
- [abc302f] Merge Set
F - Merge Set 显然要建图 首先,我们有一个粗略的想法,对于同一集合\(S_i\)内的元素,\(S_{i,j}\)与\(S_{i,j+1}\)间连一条无向的标号为\(i\)的边 那么题目显 ...
- 3.Java SDK源码分析系列笔记-LinkedList
目录 1. 是什么 2. 如何使用 3. 原理分析 3.1. uml 3.2. 构造方法 3.2.1. 队列的节点Node 3.3. add方法 3.3.1. 插入到链表尾部 3.3.2. 构造新节点 ...
- c#字符串 取最后一个符号前的字符
https://blog.csdn.net/kucoffee12/article/details/81874138 string str = "fxq.5.6.doc"; //文件 ...
- qiankunjs中vue路由使用hash模式
为什么使用hash模式 官网上举例都是拿history模式,我就想看看hash模式 history模式优在编译后缺点 file协议访问会白屏,即打包完成后,双击页面会白屏(之后还证明qiankun的微 ...
- 配置 openJDK 环境
简介 linux 配置 openjdk java环境 参考链接 https://blog.csdn.net/qq_36706878/article/details/105578816
- O(n)-O(1) RMQ
这貌似是一个很神奇的新科技. 由乃救爷爷 给你一个长为 \(n\) 的序列,你需要回答 \(q\) 次询问 每次询问给出 \(l,r\),求 \(\max\limits_{i=l}^ra_i\). 其 ...