我将密钥存储为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字节。
答案 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。因此攻击它很容易。这实际上只是混淆,而不是真正的加密。