在这个问题上,我的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文档的附录中
发布于 2018-03-30 11:58:08
所以我发现了这个案子出了什么问题。这确实是一个交换字节的问题。由于0是对称输入,它会通过,而带有混合值的输入是有效的,但是给出了错误的答案。
def swap32(x):
return (((x << 24) & 0xFF000000) |((x << 8) & 0x00FF0000) |
((x >> 8) & 0x0000FF00) |((x >> 24) & 0x000000FF)) 这个函数,用于交换8字节块,在我的例子中非常有用。我必须滑动密钥字节,要求加密的明文字节,然后在加密结束时,在解密和解密结束时。
我希望将来有人会发现这是有用的,不会像我那样被困在同一个地方。Cheers
https://stackoverflow.com/questions/49572560
复制相似问题