加密和解密中不同类型填充的混合
Mixture of different types of padding in encryption and decryption
我已经搜索了很多,但一无所获。我需要知道这一点,我可以使用 X 类型的填充进行加密并使用 Y 进行解密吗?
例如,用ISO 10126
加密,用PKCS#7
或ANSI X.923
解密?
或者它只适用于用于 encryption
和 decryption
的相同算法?
提前致谢。
理论上你不能,那些算法,就像大多数加密算法一样,彼此不兼容。
您可以使用不同的算法对某些内容加密两次或更多次,但您需要始终使用相同的算法以正确的顺序(倒置)对其进行解密。
与填充相同,每个填充可能生成不同的内容,因此您不能指望其他算法正确地找出原始消息是什么。举个例子,用ISO加密,用ANSI X.923解密,你会发现结果不一样。
让我们获取一条消息和 8 个字节的块:
... | DD DD DD DD DD DD DD DD | DD DD DD DD
ANSI X.923 填充:
... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 04 |
ISO 10126 填充:
... | DD DD DD DD DD DD DD DD | DD DD DD DD 81 A6 23 04 |
如果您首先使用 ISO,则 ANSI 期望添加的 3 个字节为“00”,而它们不是(ISO 添加的随机字节)。现在即使有 '04' 建议可以添加 4 个字节,但它显然不匹配。所以它会假设根本没有添加任何内容,并声称填充消息是原始消息。
注意:如果数据的性质以某种方式让您决定什么是填充的什么不是,那么您可以使用任何您想要的。解密后丢掉padding
更新:
正如 Artjom B. 已经注意到使用 ISO 10126 的解密将与例如兼容。 ANSI X.923 和 PKCS#7 因为它假定随机字节填充并且最后一个字节的方法是相同的。
此外,算法也没有必要严格遵循规范,在这种情况下,它们可能会退出完整格式验证并因此变得更加兼容。
我已经搜索了很多,但一无所获。我需要知道这一点,我可以使用 X 类型的填充进行加密并使用 Y 进行解密吗?
例如,用ISO 10126
加密,用PKCS#7
或ANSI X.923
解密?
或者它只适用于用于 encryption
和 decryption
的相同算法?
提前致谢。
理论上你不能,那些算法,就像大多数加密算法一样,彼此不兼容。
您可以使用不同的算法对某些内容加密两次或更多次,但您需要始终使用相同的算法以正确的顺序(倒置)对其进行解密。
与填充相同,每个填充可能生成不同的内容,因此您不能指望其他算法正确地找出原始消息是什么。举个例子,用ISO加密,用ANSI X.923解密,你会发现结果不一样。
让我们获取一条消息和 8 个字节的块:
... | DD DD DD DD DD DD DD DD | DD DD DD DD
ANSI X.923 填充:
... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 04 |
ISO 10126 填充:
... | DD DD DD DD DD DD DD DD | DD DD DD DD 81 A6 23 04 |
如果您首先使用 ISO,则 ANSI 期望添加的 3 个字节为“00”,而它们不是(ISO 添加的随机字节)。现在即使有 '04' 建议可以添加 4 个字节,但它显然不匹配。所以它会假设根本没有添加任何内容,并声称填充消息是原始消息。
注意:如果数据的性质以某种方式让您决定什么是填充的什么不是,那么您可以使用任何您想要的。解密后丢掉padding
更新: 正如 Artjom B. 已经注意到使用 ISO 10126 的解密将与例如兼容。 ANSI X.923 和 PKCS#7 因为它假定随机字节填充并且最后一个字节的方法是相同的。
此外,算法也没有必要严格遵循规范,在这种情况下,它们可能会退出完整格式验证并因此变得更加兼容。