AES/DES加密padding填充问题

前言

最近在项目上遇到个加解密的问题,用的是3des加密,我这边在Android上需要解密它加密的数据,测试发现一直都是解密失败,但是它加密的肯定没错,它自己也能解密的,了解了这一点,就排除了密钥错误的问题,想想是不是别的问题呢

解决

Java中默认实现为:DESede/ECB/PKCS5Padding, 第一个是3des加密,肯定没问题,第二个模式为ecb(电子密码本模式),也没问题,那存在问题的可能就是第三个补码方式了

上面说了,java默认的补码方式是PKCS5Padding,常用的还有PKCS7PaddingZeroPadding,先了解下三个的区别

  • ZeroPadding,数据长度不对齐时使用0填充,否则不填充。
  • PKCS7Padding,假设数据长度需要填充n(n>0)个字节才对齐,那么填充n个字节,每个字节都是n;如果数据本身就已经对齐了,则填充一块长度为块大小的数据,每个字节都是块大小。
  • PKCS5PaddingPKCS7Padding的子集,块大小固定为8字节。

那就用排除法一个个试下吧,PKCS5Padding是默认的补码方式,所以不用试了,PKCS7Padding也是一样的报错,最后用ZeroPadding发现没问题,可以正常解密,看来它加密的时候用的是ZeroPadding补码的