文档章节

AES Padding

lionets
 lionets
发布于 2017/07/25 16:51
字数 355
阅读 22
收藏 0
点赞 0
评论 0

AES 作为块加密算法(block cipher),要求被加密数据具有固定的大小,比如16 字节。那么对于一段任意大小的明文,对最后一个块补全到 16 字节就是一个必要的过程。以及在解密时将 padding 字节删除。

那么这里的关键问题便是如何设计这个 padding 方法,使解密后能够只通过明文便可以精准的切掉小尾巴。

容易发现,任何魔法字节都是不可靠的,即 pad 自身必须包含明确的描述 pad 长度的信息。出于同样的考虑,即使原始信息正好膜 16 余 0,pad 也是需要加的,这种情况可以加一个长度 16 的 pad。那么因为 pad 长度最高 16,最小 1,使用一个字节完全可以描述,那么我们可以约定:

每段明文在加密前都会添加一个 1-16 字节的 pad,使总长度膜 16 余 0。
pad 的长度由 pad 的最后一个字节描述

这样就生成了一个可靠的 padding 方法,其实也就是: PKCS7。<-- 这什么破渲染器

不过 PKCS7 在此之上还加了一层改进:就是明确要求 pad 的每个字节都是 pad 长度。这样解密后的明文更加易读。也可以做额外的判断,如果你想的话。

© 著作权归作者所有

共有 人打赏支持
lionets
粉丝 90
博文 96
码字总数 131014
作品 0
朝阳
程序员
java web与android互通的aes算法

Java实现代码 AES加密模式和填充方式 | 算法/模式/填充 | 16字节加密后数据长度 | 不满16字节加密后长度 || ------------- |:-------------:|:-----:||AES/CBC/NoPadding|16| 不支持||AES/C...

天蓝1122 ⋅ 2015/12/02 ⋅ 0

AES加密CBC模式 IOS - Java 互通共用

AES加密模式和填充方式 算法/模式/填充 16字节加密后数据长度 不满16字节加密后长度 AES/CBC/NoPadding 16 不支持 AES/CBC/PKCS5Padding 32 16 AES/CBC/ISO10126Padding 32 16 AES/CFB/NoPad...

岸芷汀兰 ⋅ 2014/12/01 ⋅ 2

AES加密解密

// // main.m // AES加密 // // Created by dc008 on 16/1/5. // Copyright © 2016年 lin. All rights reserved. // // AES和MD5相对比base64安全性更高 #import <Foundation/Foundation.h......

温暖c ⋅ 2016/01/05 ⋅ 0

IOS支持AES算法 PKCS5Padding 的填充方式吗?

我知道安卓端与服务器端的通信方式AES加密方式支持PKCS5Padding,ios支持 PKCS5Padding吗? 我看官方文档上面只支持 PKCS7Padding ,大家有没有用过ios端 PKCS5Padding的AES加密方式吗? 如果...

Java_Coder ⋅ 2014/12/14 ⋅ 0

自己写的AES加密工具类的加密结果为什么与在线AES加密网站的加密结果不一致?

我写了一个AES加密工具类,对明文进行AES加密,相关参数如下: 加密算法:AES 明文:A 算法模式:CBC 密钥长度:256 密钥:1qaz@WSX1qaz@WSX 密钥偏移量:1234567890123456 补码方式:PKCS7...

摩卡王伟 ⋅ 2013/06/24 ⋅ 1

AES加密模式和填充方式,hash,md5,ca

Java Cryptography Extension(JCE)是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)算法的框架和实现。它提供对对称、不对称、块和流密码的加密支持,...

dodojava ⋅ 2014/02/22 ⋅ 0

iOS 加密的3种方法

//需要导入 #import <CommonCrypto/CommonCryptor.h> ==============MD5加密============ NSString str = @"加密的内容"; //转换成C语言的字符串 const char cStr=[str UTF8String]; //MD5加......

wuc ⋅ 2016/01/05 ⋅ 0

关于AES256算法java端加密,ios端解密出现无法解密问题的解决方案

我想关于AES算法大家应该都已经了解了,我就不多介绍了。这是本人第一次写技术博文,如果有不对之处欢迎大家指正,共同讨论,一起学习! 之前在项目上用到AES256加密解密算法,刚开始在java端...

Sun1009 ⋅ 2012/12/13 ⋅ 32

iOS加密总结

加密一般分为 对称加密和非对称加密。 —、对称加密 对称密码学分成分组密码和序列密码(流密码)两部分,他们差异较大易于区分。 序列密码 序列密码单独加密每个位。它是通过将密钥序列中的每...

wesk痕 ⋅ 2016/11/20 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 14分钟前 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 46分钟前 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 今天 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部