C#:遍历异或键和位移

本文关键字:遍历 | 更新日期: 2023-09-27 18:36:42

我有一个存储为 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] ^= ???  
}

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

C#:遍历异或键和位移

首先将键转换为字节数组:

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 密码。所以攻击它很容易。这实际上只是混淆,而不是真正的加密。