【问题标题】:Could not decrypt (pad block corrupted) in Android (PBEWithMD5AndDES)无法在 Android (PBEWithMD5AndDES) 中解密(垫块损坏)
【发布时间】:2017-06-08 04:23:00
【问题描述】:

情况:

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

=> 我们无法解密,得到 ​​p>

java.lang.SecurityException:无法解密:垫块损坏

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

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

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

区别在哪里

【问题讨论】:

  • 请提供您用于加密和解密的实际代码以及适用于桌面 Java 但不适用于 Android 的测试向量。
  • 感谢您的报价。看起来我们找到了原因 - 使用了不同的提供程序。

标签: android encryption base64


【解决方案1】:

我们终于找到了 Java 和 Android 代码的区别。原来 Cipher 组件只是一个容器,它本身并没有实现任何东西。特定的算法实现由提供者完成,每个平台都配置了不同的提供者列表。在我们的例子中,如果是 Java 的 Sun 实现和 Android 的 Bouncy Castle。原来wir不小心使用了加密算法,不同的provider实现不一样

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 2017-03-17
    • 2014-07-03
    相关资源
    最近更新 更多