Lukas Deszyfrer
16:58Thu, 10 April 2008
Co to jest?
Program potrafiący łamać kod najróżniejszych tekstów w szczególności w przypadku, gdy nie wiemy jak zostały zakodowane. Sprawdzane są różne metody (np. przestawieniowe, przesunięciowe) a następnie wynik odszukiwany jest w słowniku. Jeśli wyniki pracy są pomyślne (słowo znajduje się w słowniku), to oznacza, że metoda jest dobra, jeśli jest podobne do któregoś ze słów, to program nadal pracuje wybraną metodą dotąd aż nie złamie zaszyfrowanego tekstu.
Jeśli pomimo tego nie uda mu się tego uczynić następuje wnioskowanie i decydowanie o kolejnych sposobach deszyfrowawnia w kolejności od jak najbardziej prawdopodobnego. Ten projekt zabierze mi trochę czasu. Póki co mogę wam zaprezentować już pierwotny interfejs użytkownika (zrzut obok).
Rozwiązanie problemu ROTX
Poniżej przedstawiam uniwersalne rozwiązanie problemu kodowania ROTX które można zawrzeć w jednej procedurze.
A... Zresztą - co mi tam - macie tutaj kod w Delphi:
// Uniwersalna funkcja przeprowadzająca kodowanie ROTX (autor: Łukasz "Lukas" Wyporek, )
function KodujOdkodujROT(tekst : string; przesuniecie : integer; kodowanie : boolean): string;
// Funkcja zwraca -1 gdy liczba ujemna lub +1 gdy liczba dodatnia lub równa 0
function Sig(liczba : integer) : integer;
begin
if (liczba shr 31) = 1 Then Result := -1 else Result := 1;
end;
var
i, k, podzialka : integer;
C : integer;
begin
k := Sig(Integer(kodowanie)-1);
C := Ord('Z')-Ord('A')+1;
podzialka := Round((C/2)+k*(C/2))-k*przesuniecie;
for i:=1 To Length(tekst) Do
if (tekst[i] in ['A'..Chr(Ord('A')+podzialka-1)]) or (tekst[i] in ['a'..Chr(Ord('a')+podzialka-1)]) Then
tekst[i] := Chr(Ord(tekst[i]) + (Round((C/2)-k*(C/2))+k*przesuniecie))
else if (tekst[i] in [Chr(Ord('A')+podzialka)..'Z']) or (tekst[i] in [Chr(Ord('a')+podzialka)..'z']) Then
tekst[i] := Chr(Ord(tekst[i]) - (Round((C/2)+k*(C/2))-k*przesuniecie));
Result := tekst;
end;