无法在Android中解密(填充块被破坏)(PBEWithMD5AndDES)

时间:2017-01-23 15:38:02

标签: android encryption base64

情况:

  • 字符串在Java环境中加密(javax.crypto.Cipher / PBEWithMD5AndDES),base64编码
  • 字符串转移到Android
  • 使用相同的加密解码器,只使用不同的base64库

=>得到

我们无法解密
  

java.lang.SecurityException:无法解密:pad block corrupted

在分析期间,我们比较了传递给decode()方法的字节数组,以便跳过所有可能的base64问题,并且数组是相同的。

同样,传递给同一个java模块的两个相同的字节数组会产生不同的结果(在java上是ok,在android上是异常)。

传递给Cipher模块的参数是硬编码的,并且在两个平台上都是相同的。

差异在哪里

1 个答案:

答案 0 :(得分:1)

我们终于找到了Java和Android代码之间的区别。原来,Cipher组件只是一个容器,并没有自己实现任何东西。特定算法实现由提供者完成,并且每个平台具有配置的不同提供者列表。在我们的例子中,如果有一些Sun实现Java和Bouncy Castle for Android。所以事实证明,wir意外地使用了加密算法,其实现对于不同的提供者来说是不同的