【问题标题】:Java Encryption issueJava 加密问题
【发布时间】:2010-03-17 15:45:53
【问题描述】:

我正在使用 PBE 加密来加密和解密 Android 应用程序上的某些文本,但是当我使用错误的私钥解密文本时,我得到了 BadPaddingException: 并显示“pad block损坏”消息。 我的问题是,由于我不熟悉Java中的加密,这是否是加密API的正常行为,因为在输入错误密钥的情况下我需要做一些逻辑,但我不知道私有密钥,我也不将其存储在任何地方(仅存储加密和解密的检查文本)。

谢谢, 米海

【问题讨论】:

    标签: java android encryption


    【解决方案1】:

    大多数键不匹配导致“错误填充错误”是正常的。但这也不是 100% 万无一失的。例如,在使用 PKCS#5 填充(一种非常常见的填充数据方式)的对称加密的情况下,大约 0.4% 的错误密钥不会导致错误的填充。解密后的数据仍然是垃圾,但是,出乎意料的是,这些垃圾最终以有效的填充结束。您的应用程序不得表明解密失败是由于错误的填充,还是由于具有异常有效的填充的垃圾:该信息(密钥是否是产生正确的 0.4% 的密钥的一部分) padding) 是一种可能产生严重后果的泄漏。有一些针对这种方式的 SSL 连接的攻击。

    【讨论】:

    • 感谢 Thomas 提供的信息,所以这意味着如果我想检查私钥的有效性,我应该处理 BadPaddingException 作为私钥无效的证明,但还要检查是否解密的结果是预期的结果,或者只是由于非常有效的填充而产生的垃圾。这样,我可以防止密钥无效但检查数据被解密的情况。
    • 是的。要获得更完整的处理,请考虑添加 MAC(消息身份验证代码 - 这有点像带有密钥的校验和)。
    【解决方案2】:

    是的,不太理想(http://developer.android.com/reference/javax/crypto/BadPaddingException.html)。解密逻辑需要在 到达实际的密文之前去除填充,并且在那个早期阶段事情就变糟了。

    【讨论】:

      【解决方案3】:

      简而言之,是的,如果在解密期间使用了错误的密码/密钥,您应该会遇到 BadPaddingException。

      编辑:但正如其他人所指出的,这不是您应该从解密代码中传达的内容。这只是一种知道使用了错误密钥的方法。

      【讨论】:

        猜你喜欢
        • 2019-12-11
        • 1970-01-01
        • 1970-01-01
        • 2017-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-23
        • 2011-04-24
        相关资源
        最近更新 更多