我目前正在尝试编写一个解密例程,加密例程中的步骤之一是:
xor eax,edx // xors eax(current character) and edx (the key)
显然我会知道关键所以有什么想法可以扭转这个操作吗?
我目前正在尝试编写一个解密例程,加密例程中的步骤之一是:
xor eax,edx // xors eax(current character) and edx (the key)
显然我会知道关键所以有什么想法可以扭转这个操作吗?
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
它可能有助于可视化 XOR 的行为。如果仅在其中一个操作数中设置了位,则 XOR 操作仅设置位。如果两者都设置,则结果为 0。这是“排他性”,否则它的行为类似于 OR:
source : 0011
key : 0101
xor-ed : 0110
因此,如果您再次使用 edx 中的相同密钥对 eax(现在包含加密值)进行异或运算,您将获得原始来源:
crypted: 0110
key : 0101
xor-ed : 0011