AES/DES加密padding填充问题
前言
最近在项目上遇到个加解密的问题,用的是3des加密,我这边在Android上需要解密它加密的数据,测试发现一直都是解密失败,但是它加密的肯定没错,它自己也能解密的,了解了这一点,就排除了密钥错误的问题,想想是不是别的问题呢
解决
Java中默认实现为:DESede/ECB/PKCS5Padding
, 第一个是3des加密,肯定没问题,第二个模式为ecb
(电子密码本模式),也没问题,那存在问题的可能就是第三个补码方式了
上面说了,java默认的补码方式是PKCS5Padding
,常用的还有PKCS7Padding
和ZeroPadding
,先了解下三个的区别
ZeroPadding
,数据长度不对齐时使用0填充,否则不填充。PKCS7Padding
,假设数据长度需要填充n(n>0)个字节才对齐,那么填充n个字节,每个字节都是n;如果数据本身就已经对齐了,则填充一块长度为块大小的数据,每个字节都是块大小。PKCS5Padding
,PKCS7Padding
的子集,块大小固定为8字节。
那就用排除法一个个试下吧,PKCS5Padding
是默认的补码方式,所以不用试了,PKCS7Padding
也是一样的报错,最后用ZeroPadding
发现没问题,可以正常解密,看来它加密的时候用的是ZeroPadding
补码的