关于PKCS5Padding与PKCS7Padding的区别
来源:互联网 发布:ps淘宝主图尺寸大小 编辑:程序博客网 时间:2024/06/06 03:43
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html
内部邀请码:C8E245J (不写邀请码,没有现金送)
国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元。
--------------------------------------------------------
原文地址: http://www.cnblogs.com/midea0978/articles/1437257.html工作中,我们常常会遇到跨语言平台的加密解密算法的交互使用,特别是一些标准的加解密算法,都设计到数据块Block与填充算法的
问题,例如C#与JAVA中的常见的填充算法如下:
.Net中的填充算法:
下面的示例演示此模式的工作原理。假定块长度为
8,数据长度为 9,则填充用八位字节数等于 7,数据等于 FF FF FF FF FF FF FF FF FF:
数据: FF FF FF FF FF FF FF FF FF
X923 填充: FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 07
ISO10126ISO10126 填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节填充随机数据。下面的示例演示此模式的工作原理。假定块长度为 8,数据长度为 9,则填充用八位字节数等于 7,数据等于 FF FF FF FF FF FF FF FF FF:
数据: FF FF FF FF FF FF FF FF FF
ISO10126 填充: FF FF FF FF FF FF FF FF FF 7D 2A 75 EF F8 EF 07
None不填充。 PKCS7PKCS #7 填充字符串由一个字节序列组成,每个字节填充该字节序列的长度。下面的示例演示这些模式的工作原理。假定块长度为 8,数据长度为 9,则填充用八位字节数等于 7,数据等于 FF FF FF FF FF FF FF FF FF:
数据: FF FF FF FF FF FF FF FF FF
PKCS7 填充: FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07
Zeros填充字符串由设置为零的字节组成。JAVA中支持的填充算法(Cipher)有
If
OAEPPadding
is used, Cipher
objects are initialized with a javax.crypto.spec.OAEPParameterSpec
object to suppply values needed for OAEPPadding.PKCS1PaddingThe padding scheme described in PKCS1, used with the RSA algorithm.PKCS5PaddingThe padding scheme described in RSA Laboratories, "PKCS5: Password-Based Encryption Standard," version 1.5, November 1993.SSL3PaddingThe padding scheme defined in the SSL Protocol Version 3.0, November 18, 1996, section 5.2.3.2 (CBC block cipher): block-ciphered struct {opaque content[SSLCompressed.length];opaque MAC[CipherSpec.hash_size];uint8 padding[ GenericBlockCipher.padding_length];uint8 padding_length; } GenericBlockCipher;
The size of an instance of a GenericBlockCipher must be a multiple of the block cipher's block length. The padding length, which is always present, contributes to the padding, which implies that if:
sizeof(content) + sizeof(MAC) % block_length = 0,
padding has to be (block_length - 1) bytes long, because of the existence of padding_length
. This make the padding scheme similar (but not quite) to PKCS5Padding, where the padding length is encoded in the padding (and ranges from 1 to block_length). With the SSL scheme, the sizeof(padding) is encoded in the always present
padding_length
and therefore ranges from 0 to block_length-1.简单对比之下发现,通用的有None,ISO10126两种填充法,实际上PKCS5Padding与PKCS7Padding基本上也是可以通用的。
通过研读参考资料下面的参考资料可以发现两者定义的区别:
An RSA Laboratories Technical Note, Version 1.5. Revised November 1, 1993. http://www.cnblogs.com/midea0978/admin/ftp://ftp.rsa.com/pub/pkcs/ascii/pkcs-7.asc
An RSA Laboratories Technical Note, Version 1.5. Revised November 1, 1993. http://www.cnblogs.com/midea0978/admin/ftp://ftp.rsa.com/pub/pkcs/ascii/pkcs-5.asc
在PKCS5Padding中,明确定义Block的大小是8位,而在PKCS7Padding定义中,对于块的大小是不确定的,可以在1-255之间(块长度超出255的尚待研究),填充值的算法都是一样的:
value=k - (l mod k) ,K=块大小,l=数据长度,如果l=8, 则需要填充额外的8个byte的8
在.net中,例如TripleDESCryptoServiceProvider ,默认BlockSize=64bits=8bytes,所以在这种情况下在PKCS5Padding=PKCS7Padding。
如果在C#中自己定义了一个不是64bits的加密块大小,同时使用PKCS7Padding,那么在java中使用JDK标准的PKCS5Padding就不能解密了。
JAVA Code示例
C# Code示例
参考http://www.users.zetnet.co.uk/hopwood/crypto/scan/cs.html#pad_PKCSPadding
- 关于PKCS5Padding与PKCS7Padding的区别
- AES - 关于PKCS5Padding与PKCS7Padding的区别
- 关于PKCS5Padding与PKCS7Padding的区别
- 关于PKCS5Padding与PKCS7Padding的区别
- PKCS5Padding与PKCS7Padding的区别
- PKCS7Padding & PKCS5Padding
- PKCS5Padding 和 PKCS7Padding
- AES 加密 中的PKCS5Padding、PKCS7Padding 和NO Padding的问题
- Java与C/C++通用的“AES/ECB/PKCS5Padding”实现
- AES/ECB/PKCS5Padding/PKCS7Padding 128位密钥(带密钥补位功能)加密解密
- 关于C++和JAVA,AES/ECB/PKCS5Padding 互相通信的问题
- AES - 关于C++和JAVA,AES/ECB/PKCS5Padding 互相通信的问题
- 关于C++和JAVA,AES/ECB/PKCS5Padding 互相通信的问题
- 加密算法AES256的ECB-PKCS7Padding加密
- Javascript与java相同的3des加密(使用etdesede/CBC/PKCS5Padding )
- php AES/CBC/PKCS5Padding 与java对接
- golang中DES/ECB/PKCS5Padding的实现
- java和iOS的DES/EBC/PKCS5Padding
- STM8S 115200bps 串口中断连续接收出错问题
- 数据库索引原理理解
- Kinect原理
- 2014年度计划
- Cocos2d-x教程(12)-利用遮罩(蒙版)CCLayerColor制作新手引导界面(中)
- 关于PKCS5Padding与PKCS7Padding的区别
- 文件上传
- 类的继承——方法的重载,super关键字
- 丢了好几年的账号终于找回来了!
- Spring的事务 之 9.3 编程式事务
- Android之基于XMPP协议即时通讯软件(一)
- Android Application Security Essentials(I)
- 进程间通信
- Fedora-20-x86_64-DVD.torrent