加密数据的填充方式(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 如果输入 ...
随机推荐
- Java多线程之 ThreadLocal
一.什么是ThreadLocal? 顾名思义它是local variable(线程局部变量).它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副 ...
- 基于MapReduce的关系代数运算(2)
1.自然连接 Map函数:对于R中的每个元组(a,b),生成键值对(b,(R,a)),对于S中的每个元组(b,c),生成键值对(b,(S,c)) Reduce函数:每个键值b会与一系列对相关联,这些对 ...
- geeksforgeeks@ Largest Number formed from an Array
http://www.practice.geeksforgeeks.org/problem-page.php?pid=380 Largest Number formed from an Array G ...
- 关闭HTML5只能提示(form上新增novalidate)
<form novalidate> <input type="text" required /> <input type="su ...
- incompatible
- 【125】固定IP的电脑配置无线路由
标题所提到的情况即为有些电脑是用静态IP上网的,与普通的宽带连接稍微有些不同,例如我的电脑的静态IP设置是这样的: 只有按照上面的设置才可以正常上网,因此在配置无线路由器的时候也要用到上面的内容,废话 ...
- STM32F407存储器和总线架构
http://www.cnblogs.com/ransn/p/5654068.html
- poj 1797 Heavy Transportation(Dijkstar变形)
http://poj.org/problem?id=1797 给定n个点,及m条边的最大负载,求顶点1到顶点n的最大载重量. 用Dijkstra算法解之,只是需要把“最短路”的定义稍微改变一下, A到 ...
- ARM内核全解析
前不久ARM正式宣布推出新款ARMv8架构的Cortex-A50处理器系列产品,以此来扩大ARM在高性能与低功耗 领域的领先地位,进一步抢占移动终端市场份额.Cortex-A50是继Cortex-A1 ...
- ZOJ 3195 Design the city LCA转RMQ
题意:给定n个点,下面n-1行 u , v ,dis 表示一条无向边和边权值,这里给了一颗无向树 下面m表示m个询问,问 u v n 三点最短距离 典型的LCA转RMQ #include<std ...