如何在Assembler中反转XOR运算?

时间:2012-04-15 18:36:12

标签: visual-c++ assembly encryption

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

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

显然我会知道关键所以任何想法如何扭转这种操作?

2 个答案:

答案 0 :(得分:4)

XOR是它自己的逆。 (按位:XOR� 0不会改变一点.XOR&1和1会翻转它,再做它会把它翻转。)

对#34;加密"价值和关键:

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

答案 1 :(得分:0)

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

source : 0011
key    : 0101
xor-ed : 0110

所以,如果您只是使用edx中的相同键再次XOR eax(现在包含加密值),您将获得原始来源:

crypted: 0110
key    : 0101
xor-ed : 0011