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 字节块的函数对我来说非常有用。我必须在加密开始时刷密钥字节,明文字节,然后在加密结束时,然后在解密开始和解密结束时。
我希望将来有人会发现这很有用,并且不会像我一样被困在同一个地方..
干杯
我遇到了这个问题,我的 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 字节块的函数对我来说非常有用。我必须在加密开始时刷密钥字节,明文字节,然后在加密结束时,然后在解密开始和解密结束时。
我希望将来有人会发现这很有用,并且不会像我一样被困在同一个地方..
干杯