我想寻求使用 cryptography.hazmat.primitives.padding.PKCS7 Python 类的帮助。
解密后,我得到字符串
453947000000197708080808
,而明文应该是4539470000001977
。根据我们的开发团队的说法,明文应该用 PKCS#5 填充来填充。所以我搜索了这个类,但无法让它工作。
我也可以手动完成此操作,方法是获取最后 2 位数字,将它们转换为整数,将其乘以 2,然后将字符串从右侧剪除该数字。但是,我更愿意使用我用于解密的同一包中的函数来进行取消填充。
您看到的字符是二进制字节的十六进制表示。您所拥有的是具有给定值的 12 个字节,以值为 8 的四个字节结尾。但是,该输出存在一些严重错误:
08
或 4 个字节值 04
;因此我希望您遗漏了结果的 4 个字节。否则解密将不会成功:CBC 或 ECB 解密的输入必须是 8 或 16 字节的倍数,否则应生成错误。
一般情况下,不需要单独执行取消填充。填充通常是针对 ECB 或 CBC 操作模式“配置”的。一般来说,PKCS#7 取消填充是 ECB 和 CBC 的默认设置(例如在 Java 和 OpenSSL 中)。
如果您想知道,我已经在上描述了 PKCS#5 和 PKCS#7 填充之间的差异。 这不是纯文本,而是十六进制:4539470000001977
真实文本长度为 8 个字节,当使用 PKCS#5 加密时,会添加另外 8 个字节的填充,因为文本是 8 字节的倍数。PKCS#7 也是如此,在你的情况下它仍然缺少 4 个字节的“08”。