Cryptography 在加密和解密中混合使用不同类型的填充

Cryptography 在加密和解密中混合使用不同类型的填充,cryptography,pkcs#7,Cryptography,Pkcs#7,我找了很多东西,却一无所获。我需要知道这一点,我可以用X类型的填充加密,用Y解密吗 例如,使用ISO 10126加密,使用PKCS#7或ANSI X.923解密 或者它只适用于加密和解密使用的相同算法 提前感谢。理论上你不能,这些算法和大多数加密算法一样,彼此不兼容 您可以使用不同的算法对某些内容加密两次或两次以上,但始终需要使用相同的算法,以适当的顺序(反转)对其进行解密 与填充相同,每个填充可能生成不同的内容,因此您不能期望其他算法正确地找出原始消息是什么。举个例子,用ISO加密,用ANSI

我找了很多东西,却一无所获。我需要知道这一点,我可以用X类型的填充加密,用Y解密吗

例如,使用
ISO 10126
加密,使用
PKCS#7
ANSI X.923
解密

或者它只适用于
加密
解密
使用的相同算法


提前感谢。

理论上你不能,这些算法和大多数加密算法一样,彼此不兼容

您可以使用不同的算法对某些内容加密两次或两次以上,但始终需要使用相同的算法,以适当的顺序(反转)对其进行解密

与填充相同,每个填充可能生成不同的内容,因此您不能期望其他算法正确地找出原始消息是什么。举个例子,用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个字节,但显然不匹配。所以它会假设根本没有添加任何内容,并声称填充的消息是原始消息

注意:如果数据的性质让你决定什么是填充的,什么不是,那么你可以使用你想要的任何东西。解密后只需删除填充

UPATE: 正如Artjom B.所注意到的,使用ISO 10126的解密将与例如兼容。ANSI X.923和PKCS#7,因为它假设随机字节填充,最后一个字节的方法相同


此外,算法无需严格遵循规范,在这种情况下,它们可能会退出完整格式验证,从而变得更加兼容。

从规范的角度来看,您基本上是正确的,但是,一些实现正在走捷径,并验证所有的填充字节在他们的日程上并不是很重要。大多数只看最后一个字节,只使用该信息。在这种情况下,所有这些衬垫都是完全兼容的。如果假设所有规范都严格遵守,那么仍然有两个兼容性:使用ANSI X.923/PKCS#7进行加密和使用ISO 10126进行解密。你是对的,ISO肯定是解密最宽松的,我会将其包括在答案中,非常感谢你的帮助。小小的观察:秩序不应该维持,而应该颠倒。如果我先用算法a加密一个内容,然后用算法B加密,那么我必须先用算法B解密,然后用算法a解密。好吧,这就是我的意思,但我可以更新以完全清楚:)这个引用与填充没有多大关系,因为这无论如何只会发生一次