加密数据的填充方式(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 如果输入 ...
随机推荐
- 打造自己的Markdown编辑器
原文链接: http://www.errdev.com/post/5/ Markdown以其简洁的语法赢得了广大程序猿的喜爱,搜了一下github上相关的web编辑器,星星比较多的 Stackedi ...
- Nagle算法,tcp小包组合(延迟)发送的算法
在j2ee中可能会引起业务的延迟,java自行决定是否需要使用 Socket.TCP_NODELAY 选项来禁用 nagle 策略算法.c语言的语法是: setsockopt( sock, IPPRO ...
- oracle查看相关用户表
select TABLE_NAME from user_tables //当前用户表 select TABLE_NAME from dba_tables //所有用户表+系统表 select TA ...
- HD1000A + B Problem
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s) ...
- C++11之使用或禁用对象的默认函数
[C++11之使用或禁用对象的默认函数] C++11 允许显式地表明采用或拒用编译器提供的内置函数.例如要求类型带有默认构造函数,可以用以下的语法: 另一方面,也可以禁止编译器自动产生某些函数.如下面 ...
- oracle不用tsname文件的时候着怎么办
oracle\product\10.2.0\client_2\odp.net\PublisherPolicy\Policy.9.2.Oracle.DataAccess.config 找到newVers ...
- C语言中字符数组和字符串指针分析
这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这 ...
- How Tomcat Works(五)
本文接下来介绍tomcat的默认连接器,Tomcat中的默认连接器必须满足以下要求: 实现org.apache.catalina.Connector接口 负责创建实现org.apache.catali ...
- How to bind to data when the DataContext is not inherited【项目】
http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherit ...
- thinkphp 3+ 观后详解 (2)
接上一章的内容,我们继续来看Think.class.php文件的start方法 static public function start() { // 注册AUTOLOAD方法 spl_autoloa ...