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] ^= ???
}
我不确定如何计算正确的字节到异或。
首先将键转换为字节数组:
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 密码。所以攻击它很容易。这实际上只是混淆,而不是真正的加密。