admin管理员组文章数量:1794759
PKCS7填充模式实现代码PHP版和Java版
一、填充模式:PKCS#5/PKCS7介绍
参考:blog.csdn/test1280/article/details/75268255
其实最核心的是:
PKCS#5在填充方面,是PKCS#7的一个子集:
PKCS#5只是对于8字节(BlockSize=8)进行填充,填充内容为0x01-0x08;
但是PKCS#7不仅仅是对8字节填充,其BlockSize范围是1-255字节。
所以,PKCS#5可以向上转换为PKCS#7,但是PKCS#7不一定可以转换到PKCS#5(用PKCS#7填充加密的密文,用PKCS#5解出来是错误的)。注意:想要实现PKCS5的代码,只用把下面代码的 blocksize 设置为8即可。
二、PHP代码实现 private function pkcs7Pad($string, $blocksize = 32) { $len = strlen($string); $pad = $blocksize - ($len % $blocksize); $string .= str_repeat(chr($pad), $pad); return $string; } private function pkcs7Unpad($string) { $pad = ord ($string {strlen($string) - 1}); if ($pad > strlen($string)) { return false; } if (strspn ($string, chr ($pad), strlen($string) - $pad) != $pad) { return false; } return substr($string, 0, - 1 * $pad); } 三、Java代码实现 private static byte[] pkcs7_pad(byte[] source, int blocksize) { int sourceLength = source.length; int padDataLen = blocksize - (sourceLength % blocksize); int afterPadLen = sourceLength + padDataLen; byte[] paddingResult = new byte[afterPadLen]; System.arraycopy(source, 0, paddingResult, 0, sourceLength); for (int i = sourceLength; i < afterPadLen; i++) { paddingResult[i] = (byte)padDataLen; } return paddingResult; } private static byte[] pkcs7_unpad(byte[] data)throws Exception { int lastValue = data[data.length-1]; byte[] unpad = new byte[data.length - lastValue]; System.arraycopy(data, 0, unpad, 0, unpad.length); return unpad; }
版权声明:本文标题:PKCS7填充模式实现代码PHP版和Java版 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686932357a119631.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论