私は現在、復号化ルーチンを作成しようとしていますが、暗号化ルーチンの手順の1つは次のとおりです。
xor eax,edx // xors eax(current character) and edx (the key)
明らかに私は鍵を知っているので、この操作を元に戻す方法はありますか?
私は現在、復号化ルーチンを作成しようとしていますが、暗号化ルーチンの手順の1つは次のとおりです。
xor eax,edx // xors eax(current character) and edx (the key)
明らかに私は鍵を知っているので、この操作を元に戻す方法はありますか?
XOR は独自の逆です。(ビット単位: 0 で XOR を実行しても少しは変わりません。1 で XOR を実行すると反転し、もう一度実行すると元に戻ります。)
「暗号化された」値とキーを再度 XOR するだけです。
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 演算は、ビットがオペランドの 1 つだけに設定されている場合にのみビットを設定します。両方に設定されている場合、結果は 0 です。これは「eXclusive」です。それ以外の場合は、OR のように動作します。
source : 0011
key : 0101
xor-ed : 0110
したがって、edx で同じキーを使用して eax (暗号化された値を含む) を再度 XOR すると、元のソースが得られます。
crypted: 0110
key : 0101
xor-ed : 0011