RC-6密文不匹配非0向量

RC-6 ciphertext does not match non 0 vectors

我遇到了这个问题,我的 RC-6 算法没有生成它应该(根据规范文档)应该更清楚的密文,让我举个例子

如您所见,当纯文本和密钥由零字节构成时,它通过了两项测试 -> 密文和解密文本测试

为了进一步说明这一点,密码值(正确和错误)在加密后也以小端方式排序。

所以我的问题是 - 我应该在哪里寻找无效代码?

我感觉这与字节顺序有关,然后再将其传递给加密或密钥调度函数。

我传递给密钥调度和加密函数的值是 32 位字的简单数组(例如 [0x00,0x10,0x00,0x00]),然后我直接将一个值移至算法(我在查看伪代码时写的)所以在此之前没有进行其他格式化。

他们也是这样开始的:

def encrypt(plaintext,S):   
    A,C = plaintext[0],plaintext[2] 
    B = modulus(plaintext[1]+S[0])
    D = modulus(plaintext[3]+S[1])  
    for i in range(1,r+1):
         ....
def keyGenerator(L):
    c = len(L)
    S = [int(0)]* (2*r+4)
    S[0] = P
    ....

我需要任何帮助..

提前致谢!

顺便说一句,官方测试向量可能在 THIS 文档的附录中

所以我发现了这个案例的问题所在。确实是交换字节的问题。由于 0 是对称输入,它会通过,并且混合值的输入有效,但给出了错误的答案。

 def swap32(x):
    return (((x << 24) & 0xFF000000) |((x <<  8) & 0x00FF0000) |
        ((x >>  8) & 0x0000FF00) |((x >> 24) & 0x000000FF)) 

这个用于交换 8 字节块的函数对我来说非常有用。我必须在加密开始时刷密钥字节,明文字节,然后在加密结束时,然后在解密开始和解密结束时。
我希望将来有人会发现这很有用,并且不会像我一样被困在同一个地方.. 干杯