0

我有一个存储为 4 字节整数的密钥。说

Int32 key = 12345678;

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

byte[] barray = ...

现在我想遍历每个字节并与密钥中的相应字节进行异或,必要时循环密钥。

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] ^= ???  
}

我不确定如何计算正确的异或字节。

4

1 回答 1

3

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

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

我正在使用它BitConverter来实现固定的字节顺序。在这个例子中是小端,但是你可以很容易地选择大端,通过以相反的顺序列出移位的字节。

然后您可以使用余数运算符%来处理关键字节:

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

您正在实施的是具有 4 字节密钥长度的Vigenère 密码。所以攻击它很容易。这实际上只是混淆,而不是真正的加密。

于 2012-06-07T23:54:50.743 回答