:: Szyfrowanie danych algorytmem XOR ::.
Metoda szyfrowania danych przy u偶yciu XOR'贸w, mimo niezbyt du偶ego
stopnia skomplikowania jest bardzo skuteczna. Nale偶y jednak najpierw
zrozumie膰, jak dzia艂a dwuargumentowa funkcja logiczna XOR (zwana te偶
inaczej alternatyw膮 wy艂膮czaj膮c膮). Zwraca ona warto艣膰 1 (true) tylko
wtedy, gdy jeden argument b臋dzie mia艂 warto艣膰 1 (true), a drugi 0
(false):
0 xor 0 -> funkcja zwr贸ci: 0
1 xor 0 -> funkcja zwr贸ci: 1
0 xor 1 -> funkcja zwr贸ci: 1
1 xor 1 -> funkcja zwr贸ci: 0
Aby skorzysta膰 z szyfrowania XOR, nale偶y najpierw zamieni膰
wprowadzone dane na zapis binarny.
Za艂贸偶my, 偶e nasze dane sk艂adaj膮 si臋 ze znak贸w ASCII. Ka偶dy znak
ASCII posiada sw贸j unikatowy (dziesi臋tny) kod liczbowy, kt贸ry mo偶emy
zapisa膰 w postaci dw贸jkowej.
Dla przypomnienia, zamiana liczby dziesi臋tnej na binarn膮 odbywa si臋
przez dzielenie tej liczby przez 2 i zapisywanie reszty z dzielenia.
Przyk艂adowa zamiana na system dziesi臋tny litery m (kod 109):
109/2 = 54 (r: 1)
54/2 = 27 (r: 0)
27/2 = 13 (r: 1)
13/2 = 6 (r: 1)
6/2 = 3 (r: 0)
3/2 = 1 (r: 1)
1/2 = 0 (r: 1)
Litera 'm' dw贸jkowo to wi臋c: 1101101. Poniewa偶 ka偶d膮 liter臋 zapisuje
si臋 standardowo przy pomocy 8 bit贸w, wrzucamy jeszcze jedno zero na
pocz膮tek i mamy: 01101101. W ten spos贸b zamieniamy binarnie ca艂y tekst.
Aby przyst膮pi膰 do szyfrowania niezb臋dne jest klucz (has艂o). R贸wnie偶
on musi zosta膰 zamieniony na posta膰 binarn膮.
SZYFROWANIE
Teraz dochodzimy do w艂a艣ciwego szyfrowania. Polega ono na
xorowaniu kolejnych bit贸w tekstu, kt贸ry chcemy zaszyfrowa膰, z
kolejny bitami klucza.
Przyk艂adowo:
Tekst: 0 1 1 0 1 1 0 1
Has艂o: 1 1 0 0 1 0 1 0
--------------------
Wynik: 1 0 1 0 0 1 1 1
W wyniku szyfrowania danych 01101101 otrzymali艣my: 10100111.
DESZYFRACJA
Warto zwr贸ci膰 uwag臋 na pewn膮 szczeg贸ln膮 cech臋 xorowania:
funkcja xor wykonana 2 razy na tych samych danych nie zmienia ich
(tzn. (A xor B) xor B -> funkcja zwr贸ci: A). Przyk艂ad:
A = 0
B = 1
A xor B = 1
1 xor B = 0 = A
Aby odszyfrowa膰 wi臋c dane wystarczy xorowa膰 bity zaszyfrowanych
danych z has艂em. Wracaj膮c jeszcze raz do naszego przyk艂adu:
Tekst: 1 0 1 0 0 1 1 1
Has艂o: 1 1 0 0 1 0 1 0
--------------------
Wynik: 0 1 1 0 1 1 0 1
Oczywi艣cie has艂a nie musz膮 (a nawet nie powinny!) zawiera膰 jedynie 8
bit贸w. Np. has艂o zawieraj膮ce 8 znak贸w b臋dzie sk艂ada艂o si臋 z 64
bit贸w, co daje nam ju偶 wzgl臋dne bezpiecze艅stwo. Je艣li dodatkowo w
algorytmie b臋dziemy tworzy膰 okre艣lone permutacje (kombinacje) bit贸w
z klucza (nawet tak banalne, jak czytanie ich od ty艂u), to szyfr
b臋dzie praktycznie nie do z艂amania.
Uwaga dla programuj膮cych w C/C++: aby xorowa膰 2 zmienne, nale偶y u偶y膰 symbolu: ^. Xorowanie zmiennych a i b b臋dzie wi臋c wygl膮da膰 tak: a^b