Хорошо, попробуйте и задайте вопросы, которые у вас есть, и я соответствующим образом исправлю свой ответ:
; EAX: en/decryption key
; ECX: plain character
encrypt11:
push edx ; simply save edx
push ecx
ror al,1 ; modify key
ror al,1
ror al,1
mov edx,eax ; edx = <modified key>
pop eax ; eax = <original character>
sub eax,0x02 ; eax -= 2
xor eax,edx ; eax ^= edx
rol al,1 ; modify encrypted character
rol al,1
rol al,1
pop edx ; simply restore edx
ret
; EAX: en/decryption key
; ECX: encrypted character
decrypt11:
push edx ; simply save edx
push ecx
ror al,1 ; modify key
ror al,1
ror al,1
mov edx,eax ; edx = <modified key>
pop eax ; eax = <encrypted character>
ror al,1 ; modify encrypted character
ror al,1
ror al,1
xor eax,edx ; eax ^= edx
add eax,0x02 ; eax += 2
pop edx
ret
Возьмем следующие имена key
и chr
для ввода в шифрование. Суть в том, что в шифровании первое, что нужно сделать, это изменить (три ror
) key
, что дает key'
. Затем мы вычитаем из входного символа 2, что дает chr'
. Тогда chr'
и key'
объединяются с xor
, давая chr''
. Как только это будет сделано, chr''
будет дополнительно изменен (три rol
), что даст выходное значение echr
.
Для расшифровки мы вводим echr
и key
снова. Затем нам нужно получить chr''
из chr
(три ror
в расшифровке). Затем нам нужно получить key'
из key
и xor-объединить key'
и chr''
, получив chr'
. Оттуда мы только добавляем 2 к chr'
, чтобы получить chr
в качестве вывода.