如何使用PHP撤销/反转XOR操作?

6

就概念而言,我对XOR有点困惑。我有一个需要解密的轻加密函数,但我不确定如何使其正常工作。

如果我的值最初是由以下方式生成的:

$val = dechex($seed^$id);

我有相应的 $val 和 $seed,如何生成 $id?

1个回答

24

XOR是自反的,因此你可以再次将$val$seed进行XOR运算,从而得到$id。不过,在此之前,你可能需要先对$val运行hexdec


5
另一个有趣的异或事实是:将一个值与自身进行异或运算会得到0。在使用汇编语言编写Intel处理器指令时,这个技巧非常实用。XOR EAX,EAX 会被编译成单字节指令,而 MOV EAX,0 却需要6个字节的空间(我记得是这样,因为我已经很久没写汇编语言了)。 - Marc B
@Marc:我也相信,至少对于最近的AMD处理器来说,他们知道XOR EAX,EAX不使用旧值的EAX,因此不需要计算它。 - Jeremiah Willcock
计算什么?EAX是一个寄存器,始终可用。不应该有任何需要计算的东西。 - Marc B
1
@Marc:它不会等待任何先前写入EAX的指令完成。 - Jeremiah Willcock
1
希望Athlons记得需要忽略飞行中计算的结果。否则,在执行XOR操作后,最终可能会得到一个非零的EAX值。 - Marc B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接