1

我遇到了这个问题,我的 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
    ....

我可以使用任何帮助..

先感谢您!

顺便说一下,官方的测试向量可以在这个文件的附录中

4

1 回答 1

1

所以我发现在这种情况下出了什么问题。这确实是交换字节的问题。由于 0 是对称输入,它会通过,并且混合值的输入正在工作,但是给出了错误的答案。

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

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

于 2018-03-30T11:58:08.830 回答