求解按位XOR和ROR方程

前端之家收集整理的这篇文章主要介绍了求解按位XOR和ROR方程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我被告知x ^ ROR(x,13)= 0x936f2a8247534566

^是XOR运算符,就像在C中一样,ROR()是一个函数,它将输入的位旋转指定的位置数,如Intel processor instruction.

问题是如何找到x.尝试每个64位组合似乎有很多可能性,也许有更好的方法

解决方法

这个算法
unsigned long long res = 0;
int bit = 1;
for (int k = 0,shift = 0; k < 64; k++,shift = (shift + 13) % 64)
{
    if (bit)
        res |= 1ull << shift;
    if (0x936f2a8247534566 & (1ull << shift))
        bit = 1 - bit;
}

给出了答案

0x1337b33fdeadb00b

如果我们从bit = 0开始,答案就是

0xecc84cc021524ff4

这个想法如下.如果0x936f2a8247534566的最后一位为0,则表示位[13] ^位[0] == 0,因此位相等.否则位[0]和位[13]不同.

相同的逻辑适用于位[13]和位[26]等.所以基本上数字0x936f2a8247534566告诉我们原始数字的哪些位彼此相等而哪些不相等.

从步骤13开始,我们得到0到63(含)之间的所有可能位置,我们只需要一个循环.

猜你在找的C&C++相关文章