【问题标题】:Bouncy Castle PKCS7 padding充气城堡 PKCS7 填充物
【发布时间】:2016-01-18 22:33:37
【问题描述】:

我需要帮助才能在 Bouncy Castle java 框架中找到这个表达式的实际填充值。有点不确定这些值。

加密(字节,iv,秘密,“AES/CBC/PKCS7Padding”)

【问题讨论】:

  • 你问PKCS7Padding是什么意思?
  • PKCS#7 填充是 PKCS#5 填充的超集。本质上,PKCS#5 只为 8 字节的块大小定义,而 PKCS#7 只是将定义扩展到 255 字节。此外,如果对不支持 PKCS#7 的 PKCS#5 的实现进行精细处理是非常罕见的,实际上两者可以互换使用。请参阅PKCS#7 padding

标签: java cryptography bouncycastle


【解决方案1】:

如果原始数据是 N 字节的整数倍,则添加一个额外的值为 N 的字节块。这是必要的,因此解密算法可以确定地确定最后一个块的最后一个字节是否是一个填充字节,它指示添加的填充字节数或明文消息的一部分。考虑一个明文消息,它是 N 字节的整数倍,明文的最后一个字节是 01。没有附加信息,解密算法将无法确定最后一个字节是明文字节还是填充字节。然而,通过在 01 明文字节之后添加 N 个字节,每个值 N,解密算法总是可以将最后一个字节视为填充字节,并从密文末尾剥离适当数量的填充字节;根据最后一个字节的值,要剥离的字节数。

【讨论】:

    【解决方案2】:

    使用的填充字节与填充字节数相同。因此,如果需要 11 个字节的填充,则该填充由字节 0x0b 的 11 个副本组成。始终应用填充,因此如果字节数已经是 16 的倍数,则使用 16 个字节的填充,在这种情况下填充字节为 0x10。

    这种填充方案有一个很好的功能,在解密时,您可以检查填充明文的最后一个字节以确定总共有多少填充字节。

    请注意,PKCS7 填充不是特定于 java 的标准,而是一种非常常见的独立于语言的填充方案。

    【讨论】:

    • 是的,我知道,但我认为 BC 没有正确使用 PKCS7 填充,不知道。我应该用不同的语言编写这个逻辑。在我的情况下,我得到了 65 个字节,我将 15 个字节的 0x0b 拟合为 80,因为我理解正确?
    • 没有。如果你有 65 个字节,那么你需要 15 个字节的填充,这些字节应该是 0x0f。
    猜你喜欢
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2014-09-19
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多