Sa va arat si algoritmul meu de criptare simetrica bazata pe operatia XOR, destul de optimizat [am stat ceva vreme sa il aduc in varianata asta], proceseaza ~800MB pe secunda, lucrul direct cu memoria, neluand in calcul incarcarea datelor in memorie.
L-am folosit si la
Multi Packer, la una din cele 3 metode de criptare [criptarea "Simpla"].
pushad
mov esi, textAddr
mov edi, passAddr
add maxSize, 1
mov ecx, maxSize
xor ebx,ebx
mov eax, passlenDW
@loop:
mov edx, [ds:edi+ebx*4]
xor [ds:esi], edx
inc ebx
add esi, 4
cmp ebx,eax
jne @cont
xor ebx,ebx
@cont:
dec ecx
jnz @loop
popad
Unde:
textAddr - adresa primului caracter din textul ce urmeaza a fi encriptat
passAddr - adresa primului caracter din parola
maxSize - lungimea textului DIV 4 [pentru ca XOR-eaza seturi a cate 4 bytes, deci numarul de parcurgeri trebuie sa fie LungimeText / 4 ]
passlenDW - lungimea parolei
De mentionat faptul ca, din moment ce proceseaza seturi de 4 bytes [1 dword], lungimea textului si a parolei trebuie sa fie multiplii de 4, daca nu sunt multiplii de 4 mai adaugati voi la textul respectiv inainte de criptare cati bytes mai e nevoie sa fie multiplu de 4 [1, 2 sau 3]
De asemenea, se poate face si criptare pe 8 bytes [QWord - QuadWord], astfel era de doua ori mai repede criptarea, dar asta pe procesoarele pe 64bits