C#:在xor键和bithifting上循环?

时间:2012-06-07 23:51:19

标签: c#

我将密钥存储为4字节整数。说

Int32 key = 12345678;

我有一个字节数组,表示加密字符串的字符

byte[] barray = ...

现在我想用键中的相应字节循环每个字节和XOR,必要时循环键。

1st byte ^= key & 0xFF
2nd byte ^= key & 0xFF 00
3rd byte ^= key & 0xFF 00 00
4th byte ^= key & 0xFF 00 00 00
5th byte ^= key & 0xFF

如何编写循环?我从

开始
for (int i = 0; i < barray.length; i++)
{
   barray[i] ^= ???  
}

我不知道如何使用。来计算正确的xor字节。

1 个答案:

答案 0 :(得分:3)

首先将密钥转换为字节数组:

byte[] keyBytes;
unchecked
{
    keyBytes = new byte[]{(byte)(key >> 0),
                          (byte)(key >> 8),
                          (byte)(key >> 16),
                          (byte)(key >> 24);
}

我在BitConverter上使用它来实现固定的字节序。这个例子中的小端,但你可以通过以相反的顺序列出shiften字节来轻松选择big endian。

然后你可以使用余数运算符%来解决关键字节:

for (int i = 0; i < barray.length; i++)
{
    barray[i] ^= keyBytes[i%4];
}

您正在实现的是具有4字节键长的Vigenère cipher。因此攻击它很容易。这实际上只是混淆,而不是真正的加密。