XOR šifriranje

Iz Wikipedije, proste enciklopedije

XOR šifriranje je algoritem za simetrično šifriranje. Šifriranje z XOR šifriranjem skrije podatke s pomočjo bitnega operatorja XOR. Operator XOR vrne logično 1 le tedaj, kadar je en vhod 0 in drugi 1. Operator XOR se v programskem jeziku C označi kot znak ^.

Primer:

  10010011
 ^10101110
 ----------
  00111101

Šifriranje podatkov poteče tako, da posamezen bajt XORa z vsakim znakom iz gesla. Na primer, da imamo za znak črko f, naše geslo je pa ab.

Pa pretvorimo znake.

Znak ASCII vrednost Binarna vrednost
f 102 1100110
a 97 1100001
b 98 1100010

Sedaj moramo bajt, ki predstavlja črko f XOR-at z vsemi znakimi iz gesla. Začnemo pa od prvega.

  1100110 (znak 'f')
 ^1100001 (znak 'a' iz gesla)
----------
  0000111 (rezultat)

Rezultat je binarno število 0000111. Sedaj pa ta rezultat ponovno XOR-amo z naslednjim znakom od gesla:

  0000111 (rezultat)
 ^1100010 (znak 'b' iz gesla)
 ----------
  1100101 (končni rezultat)

Končni rezultat je 1100101 v binarni vrednosti, ki predstavlja zašifriran del izvorne datoteke.

Moč šifriranja je odvisna od dolžine gesla.

XOR način šifriranja ni priporočljiv, saj se že na pogled šifrirane datoteke ugotovijo ponavljanja in je zato takšno šifriranje zlahka razbiti.


Psevdo koda[uredi | uredi kodo]

 while(done < len) {
 	tmp_ch = *buffer;
 	for(int i = 0; i < key_len; i++)
 		tmp_ch ^= key[i];
 	*crypted = tmp_ch;
 	crypted++; buffer++; done++;
 }

Podatki se pa odšifrirajo tako, da se bajt XOR-a z vsakim bajtom podanega ključa, ki se pa začne z zadnjim bajtom.


 while (done <= len) {
 	tmp_ch = *buffer;
 	for(int i = key_len-1; i >= 0; i--) {
 		tmp_ch ^= key[i];
 	}
 	*decrypted = tmp_ch;
 	decrypted++; buffer++; done++;
 }