0

我目前正在尝试编写一个解密例程,加密例程中的步骤之一是:

xor eax,edx  // xors eax(current character) and edx (the key)

显然我会知道关键所以有什么想法可以扭转这个操作吗?

4

2 回答 2

4

XOR 是它自己的逆。(按位:与 0 进行异或不会改变一点。与 1 进行异或会翻转它,再做一次会将它翻转回来。)

只需将“加密”值和密钥再次异或:

encrypted = plain XOR key
encrypted XOR key = (plain XOR key) XOR key
encrypted XOR key = plain XOR (key XOR key)
encrypted XOR key = plain XOR (000...0)
encrypted XOR key = plain
于 2012-04-15T18:38:33.463 回答
0

它可能有助于可视化 XOR 的行为。如果仅在其中一个操作数中设置了位,则 XOR 操作仅设置位。如果两者都设置,则结果为 0。这是“排他性”,否则它的行为类似于 OR:

source : 0011
key    : 0101
xor-ed : 0110

因此,如果您再次使用 edx 中的相同密钥对 eax(现在包含加密值)进行异或运算,您将获得原始来源:

crypted: 0110
key    : 0101
xor-ed : 0011
于 2012-04-17T04:09:59.730 回答