一个运行时平台提供了一个API,为诸如ECB和CBC这样的分组密码模式提供PKCS#5填充。这些模式已经被定义为三重DES,AES和Blowfish块密码。另一个平台API只提供PKCS#7填充。
PKCS#5填充和PKCS#7填充兼容吗?
发布于 2013-07-04 21:18:51
PKCS#5和PKCS#7 填充机构之间的区别是块大小;PKCS#5填充是为8字节块大小定义的,PKCS#7填充对于从1到255个字节的任何块大小都是有效的。
这是RFC中定义的PKCS#5填充(6.2)的定义:
填充字符串PS应由8-(x,x,m,mod,8)八位数组成,所有八位数都有值为8-(x-)。
包含PKCS#7标准的RFC是相同的,只不过它允许最大255个字节的块大小(10.3注释2):
对于这样的算法,方法应该是在尾尾用k- (l mod k)八位数来填充输入,这些八位数都具有k- (l mod k)值,而在此输入的长度是加长。
因此,从根本上说,PKCS#5填充是8字节块大小的PKCS#7填充的子集。因此,PKCS#5填充不能用于AES。PKCS#5填充只定义了RC2/RC5和(三重) DES操作。
许多密码库使用指示PKCS#5或PKCS#7的标识符来定义相同的填充机制。如果在计算中使用了8以外的块大小,则标识符应指示PKCS#7。一些密码库(如Java中的SUN提供者 )表示PKCS#5应该在哪里使用PKCS#7 -- "PKCS5Padding"
应该是"PKCS7Padding"
。这是一个高概率遗留下来的,当时只有8个字节块密码,如(三重) DES对称密码可用。
注意,PKCS#5和PKCS#7都不是用来描述填充机制的标准。填充部分只是定义功能的一小部分。PKCS#5是基于密码的加密( PBE )标准,PKCS#7定义了密码消息语法或CMS。从这个意义上说,您可以说欧洲央行和CBC模式可以使用PKCS#5或PKCS#7兼容的填充。后来的PKCS#5标准仅仅是指16字节块密码的PKCS#7 CMS标准的继承者,例如AES。
https://crypto.stackexchange.com/questions/9043
复制相似问题