加密数据的填充方式(Padding)
1.填充数据为填充字节的长度
这种填充方式中,填充字符串由一个字节序列组成,每个字节填充该字节序列的长度。假定块长度为8,原文数据长度9,则填充字节数等于0x07;如果明文数据长度为8的整数倍,则填充字节数为0x08。填充
字符串如下:
原文数据
1:FF FF FF FF FF FF FF FF FF
填充后数据
1:FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07
原文数据
2:FF FF FF FF FF FF FF FF
填充后数据
2:FF FF FF FF FF FF FF FF 08 08 08 08 08 08 08 08
(2)填充数据为0x80后加0x00
这种填充方式中,填充字符串的第一个字节数是0x80,后面的每个字节是0x00。假定块长度为8,原文数据长度为9或者为8的整数倍,则填充字符串如下:
原文数据
1:FF FF FF FF FF FF FF FF FF
填充后数据
1:FF FF FF FF FF FF FF FF FF 80 00 00 00 00 00 00
原文数据
2:FF FF FF FF FF FF FF FF
填充后数据
2:FF FF FF FF FF FF FF FF 80 00 00 00 00 00 00 00
(3)填充数据的最后一个字节为填充字节序列的长度
这种填充方式中,填充字符串的最后一个字节为该字节序列的长度,而前面的字节可以是0x00,也可以是随机的字节序列。假定块长度为8,原文数据长度为9或者为8的整数倍,则填充字符串如下:
原文数据
1:FF FF FF FF FF FF FF FF FF
填充后数据
1:FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 07
或
FF FF FF FF FF FF FF FF FF 58 B3 98 9B AD F4 07
原文数据
2:FF FF FF FF FF FF FF FF
填充后数据
2:FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 08
或
FF FF FF FF FF FF FF FF 32 58 B3 98 9B AD F4 08
(4)填充数据为空格
这种填充方式中,填充字符串的每个字节为空格对应的字节数0x20。假定块长度为8,原文数据长度为9或者为8的整数倍,则填充字符串如下:原文数据1:
FF FF FF FF FF FF FF FF FF
填充后数据
1:FF FF FF FF FF FF FF FF FF 20 20 20 20 20 20 20
原文数据
2:FF FF FF FF FF FF FF FF
填充后数据
2:FF FF FF FF FF FF FF FF 20 20 20 20 20 20 20 20
(5)填充数据为0x00
这 种 填 充 方 式 中 ,填 充 字 符 串 的 每 个 字 节 为0x00。假定块长度为8,原文数据长度为9或者8的整数倍,则填充字符串如下:原文数据1:
FF FF FF FF FF FF FF FF FF
填充后数据
1:FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00
原文数据
2:FF FF FF FF FF FF FF FF
填充后数据
:FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00
在填充方式(4)和方式(5)中,由于缺少填充数据长度的标识信息,如果原文数据的后几个字节本身包括空格或0
,将不能够准确移去填充的数据。因此使用这样的填充方式时,对原文数据有一定的要求。
填充标准:
PKCS5Padding或PKCS7Padding是RSA公司的公钥密码学标准,与填充方式一对应
PKCS#1(v1.5)中规定当RSA的密钥长度是1024b,如果使用PKCS1Padding填充,则原文数据必须小于117B,即至少8B需要填充。如果原文不满足长度要求,则在加密前需要进行填充。假定原文数据长度为96 B,则填充处理后字符串分别如下:
原文数据:
61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70
71 72 73 74 75 76 77 78 79 7A 30 31 32 33 34 35
61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70
71 72 73 74 75 76 77 78 79 7A 30 31 32 33 34 35
61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70
71 72 73 74 75 76 77 78 79 7A 30 31 32 33 34 35
私钥操作,00型,填充后数据:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70
……
私钥操作,01型,填充后数据:
00 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00
61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70
……
公钥操作,02型,填充后数据:
00 02 58 DE B9 E7 15 46 16 D9 74 9D EC BE C0 EA
B5 EC BB B5 0D C4 29 95 6C 18 17 BE 41 57 19 00
61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70
……
从填充后的数据可以看出,对于00型的私钥操作,要求原文数据必须不能包含0x00,或者知晓数据长度,否则将不能准确移去填充数据。因此在加解密操作中,常使用01型的私钥操作和02型的公钥操作。
参考文献:
[1]樊志英. 关于加密数据的填充方式的研究[J]. 现代电子技术,2014,22:20-23.
加密数据的填充方式(Padding)的更多相关文章
- Pytorch 四种边界填充方式(Padding)
1. 选用卷积之前填充(强烈建议) 小生非常推荐大家不再使用卷积所带的填充方式,虽然那种方式简单,但缺陷太多.① 不能根据自己的需要来决定上与下填充不等的边界,左右填充不等的边界:② 边界填充零容易出 ...
- Flex 4中组件背景设置(填充方式)group为例子
以下以Group为例子讲述如何在Flex 4中填充背景颜色.图片: 1.图片填充方式: <s:Group x="0" y="0" height=" ...
- UI-UIImageView的图片填充方式(contentMode)_图片作为控件背景图的拉伸方式(stretch)介绍
常用图片填充方式 这里只介绍三个最常用的图片填充方式 UIViewContentModeScaleToFill模式会导致图片变形.例如: UIViewContentModeScaleAspectFit ...
- C++调用openssl实现DES加密解密cbc模式 zeropadding填充方式 pkcs5padding填充方式 pkcs7padding填充方式
============================================== des cbc 加密 zeropadding填充方式 ======================= ...
- RSA加密常用的填充方式 以及 常见错误
一.RSA加密常用的填充方式 1.RSA_PKCS1_PADDING 输入:比 RSA modulus 短至少11个字节.如果输入的明文过长,必须切割,然后填充 输出:和modulus一样长 根据这个 ...
- NLP 装桶(Bucketing)和填充(padding)
翻译模型也是用了装桶(bucketing)和填充(padding),这两种方法是用于高效地处理不同长度句子的情况.我们首先来弄清楚是怎么一回事.当我们从英语翻译成法语的时候,假设我们的输入英语的长度为 ...
- PKCS #1 RSA Encryption Version 1.5 填充方式
在进行RSA运算时需要将源数据D转化为Encryption block(EB).其中pkcs1padding V1.5的填充模式安装以下方式进行 (1) EB = 00+ BT+PS +00 + D ...
- java aes CBC的填充方式发现
如下的java代码,手动对block进行填充后,使其为16的整数倍后,加密的时候竟然强行再填充了16位,我在尝试用golang实现这段加密时,反复修改了很久,发现golang版的总是比java加密出来 ...
- RSA PKCS1 填充方式
1)RSA_PKCS1_PADDING 填充模式,最常用的模式 要求:输入 必须 比 RSA 钥模长(modulus) 短至少11个字节, 也就是 RSA_size(rsa) – 11 如果输入 ...
随机推荐
- Hibernate学习笔记(三)Hibernate生成表单ID主键生成策略
一. Xml方式 <id>标签必须配置在<class>标签内第一个位置.由一个字段构成主键,如果是复杂主键<composite-id>标签 被映射的类必须定义对应数 ...
- 流式计算之Storm简介
Storm是一个分布式的.容错的实时计算系统,遵循Eclipse Public License 1.0,Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm之于实时处理,就好比H ...
- 构造数组的MaxTree
题目 一个数组的MaxTree定义: 数组必须没有重复元素 MaxTree是一棵二叉树,数组的每一个值对应一个二叉树节点 包括MaxTree树在内且在其中的每一棵子树上,值最大的节点都是树的头 给定一 ...
- Hadoop MapReduce概念学习系列之mr程序组件全貌(二十)
其实啊,spilt是,控制Apache Hadoop Mapreduce的map并发任务数,详细见http://www.cnblogs.com/zlslch/p/5713652.html map,是m ...
- jy
222 DROP TABLE t_vhl_jy_car; CREATE TABLE t_vhl_jy_car( VEHICLE_JY_CODE ) PRIMARY KEY, VEHICLE_CODE ...
- Linux syslog 学习
最经有在看lighttpd facgi相关的东西.在lighttpd官网上看到如下sample code. #include <stdlib.h> #include <string. ...
- eclipse下创建maven工程
http://blog.chinaunix.net/uid-26959955-id-3248053.html
- Linux下的Shell编程
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...
- C#中的Collection 2
Core Generic interface IEnumerable<T>:you can interate my elemnts, no need to know the count, ...
- MES取所有部门的函数实例
USE [ChangHong]GO/****** Object: UserDefinedFunction [dbo].[FN_GetDeptCode] Script Date: 04/26/2016 ...