我正在尝试反转 XOR 加密。我有加密代码:
// Walk the 16 nibbles in the 64 bit long long, selecting the corresponding key digit
// and XORing it into the result.
unsigned long long result = 0;
for( i=0; i<16; i++ )
{
int n = 4*(i % keyLen);
int k = (key & (0xF << n)) >> n;
result |= value&(0xF << 4*i) ^ (k<<4*i);
}
Run Code Online (Sandbox Code Playgroud)
第一行没问题。
第二个和第三个不是。我的 3 个问题是:
您提供的代码似乎只是对数据的每个 4 位半字节执行 XOR(即一次相当于一个十六进制字符)。
按位&和移位操作只是屏蔽了每轮循环中使用的特定位集for。您不需要“恢复”任何丢失的位,因为所做的只是创建位掩码。
由于这是直接的 XOR 加密,因此它具有以下解密例程:
unsigned long long result = 0;
for( i=0; i<16; i++ )
{
int n = 4*(i % keyLen);
int k = (key & (0xF << n)) >> n;
result |= value&(0xF << 4*i) ^ (k<<4*i);
}
Run Code Online (Sandbox Code Playgroud)
这恰好是加密例程(异或加密是通过使用相同密钥通过加密例程运行密文来解密的)。
当然,我觉得有必要指出,XOR 加密只是一个玩具 - 它非常脆弱且容易破解。所以我希望你只是玩玩或学习。
不幸的是,这种代码经常出现在实际产品中......
| 归档时间: |
|
| 查看次数: |
10389 次 |
| 最近记录: |