XOR šifriranje
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++; }