algorytm.org

Algorytm XOR + liczby pseudolosowe



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Algorytm XOR + liczby pseudolosowe
Ocena użytkowników:***** / 8
SłabyŚwietny 
Wpisany przez Waldemar Sradomski, 02 grudnia 2007 14:35

Jednym z łatwiejszych algorytmów szyfrujących jest algorytm XOR. W Pascal’u procedura szyfrująca może wyglądać następująco:

procedure szyfrXOR(var napis : string; klucz : byte);
var I :integer;
begin
  for i:=1 to length(napis) do
     napis[i] := char(byte(napis[i]) xor klucz )
end;

Deszyfrowanie odbywa się z użyciem tej samej procedury z tym, że jako napis wejściowy mamy tekst zaszyfrowany a jako wyjściowy oryginalny test przed zaszyforwaniem. Oczywiście zastosowanie klucza w o 255 różnych wartościach nie daje możliwości uzyskania dużej siły szyfrowania. Modyfikacje poprawiające siłę szyfrowania powinny w większym stopniu różnicować klucz, można to zrobić np. przy pomocy klucza w postaci napisu wykonując operację xor na kolejnych znakach tekstu szyfrowanego i hasła:

wynik[i] := char(byte(napis[i]) xor byte(haslo[j]))

im dłuższe hasło tym lepszy wynik szyfrowania. Efekt szyfrowania znacznie lepiej będzie wyglądać gdy hasłem nie będzie napis ale ciąg liczb losowych, no nie do końca losowych. Generatory liczb pseudolosowych podają ciągi liczb zależne od liczby jaką generator został zainicjowany, do inicjacji generatora liczb losowych w Pascal’u (Delphi) służy procedura Randomize. W procedurze tej zmiennej RandSeed (jądrze generatora) przypisuje się czas komputera.

Tabela Przykład liczb losowych w zależności od wartości zmiennej RandSeed, standardowa funkcja Random(255)
RandSeed0102040
kolejne
wartości
liczb
pseudolosowych
0
8
220
51
69
171
81
41
95
108
20
121
18
80
83
70
231
66
36
191
68
232
253
2
110
197
160
159
177
156
63
156
46
94
112
141
240
99
121
65
55
133
4
56
141
10
148
130
173
203
78
225


Taką właściwość generatora liczb losowych możemy wykorzystać do szyfrowania następująco:

procedure szyfrXOR2(var napis : string; klucz : LongInt);
var i : integer;
begin
  RandSeed := klucz;
  for i:=1 to length(napis) do
     napis[i] := char(byte(napis[i]) xor byte(Random(255)))
end;

Jak widzimy funkcja szyfrująca ma zalety algorytmu XOR ale siła szyfrowania zwiększyła się. Szyfrowanie jest tak dobre jak generator liczb losowych. Standardowy generator inicjuje się liczbą typu LongInt, a więc może przyjmować wartości: -2147483648..2147483647. Moim zdaniem generowanie klucza najlepiej przeprowadzić przy pomocy algorytmu CRC, który na podstawie napisu generuje liczbę.

Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Waldemar SradomskiDelphi/Pascal
.pas
.pas
***** / 1
Nikodem SolarzRubyMetoda obliczająca.
.rb
.rb
***** / 0
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język
programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie

Poprawiony: 04 października 2012 18:38
Dodaj komentarz