2013-11-24 28 views
0

我正在使用使用4字节密钥的加密算法。它的工作原理是这样使用整数密钥实现加密算法:如何在此过程中存储密钥

(pseudocode) 
for i = 0 to size_of_data 
    data[i] ^= key[i % 4] 

    if (i % 4 == 0) 
     key *= 5 
     key += 2893 
    end 
end 

所以基本上,每次你到达关键的最后,您可以通过一些固定的量与下一组的字节,然后再继续繁衍的关键价值。

我的问题与我在解密数据时应如何存储密钥有关。我可以选择将它作为一个字节数组存储,这很容易迭代,但如果我必须对字节数组进行一些数学运算,它会变得有点复杂。另一方面,我可以将密钥存储为字节数组的4个字节的整数表示形式,然后执行相应的移位操作来异或正确的字节。这使得修改密钥变得很容易,因为我已经使用了一个整数。

什么是更好的方法来解决这个问题?两者都是有效的解决方案,但是当涉及字节操作时,可能会有更好的方法。

回答

1

当您对其使用整数运算时,最好将密钥保留为无符号整数。然后通过移动该值来检索值,例如, data[i] ^= ((key >> ((i % 4) * 8)) & 0xFF)

+0

对不起,如果上面有问题,我的c有点生疏。基本上你可以通过移位一个整数并得到最低有效位来检索字节值。 –