|
|
Nazwa: Szyfr z dowolnym przesunięciem
Rodzaj: Monoalfabetyczny szyfr podstawieniowy, ograniczony.
Historia i zastosowanie: Jest to uogólnienie algorytmu Cezara i ROT-13.
Opis metody: Zasada działania jest identyczna jak w algorytmie Cezara i ROT 13. W tym przypadku wartość przesunięcia wyznacza sam użytkownik. Wartość ta dla szyfrowania jak i deszyfrowania musi być identyczna.
Zapis matematyczny tych operacji wygląda następująco:
Szyfrowanie:
C=E(p)=(p+n)mod 26
Deszyfrowanie:
p=D(c)=(c-n)mod 26
Przez n rozumiemy wartość przesunięcia.
Przyjmuje się, że alfabet składa się z 26 liter.
Dodam jeszcze, że dwukrotne zaszyfrowanie tekstu nie wpływa na trudność jego odszyfrowania. Gdybyśmy zaszyfrowali nasz tekst najpierw z przesunięciem równym 3 a następnie 13, to otrzymamy taki sam szyfrogram jak w przypadku szyfrowania z przesunięciem równym 16.
Opis procedury: Szyfrowany/deszyfrowany tekst znajduje się w pliku. Dodatkowo przed uruchomieniem procedury należy stworzyć drugi plik, będący plikiem wynikowym. W programie podajemy nazwy tych plików. Użytkownik podaje wartość przesunięcia z przedziału <1,25>. Następnie otwierane są oba pliki i jeżeli operacja ta powiedzie się zaczyna się szyfrowanie/deszyfrowanie. Za każdym razem pobierana jest jedna litera tekstu. Następnie zgodnie z kodem ASCII przydzielana jest ona do trzech możliwych grup: duże litery, małe litery lub cyfry. Cyfry są w procedurze szyfrowane z wykorzystaniem operacji mod 10. Jeżeli ktoś uważa szyfrowanie cyfr za coś niepotrzebnego wystarczy, że usunie ostatni blok else if. Wszystkie inne znaki w tym spacja podczas szyfrowania zostają usunięte. Jeżeli komuś zależy, aby inne znaki też były szyfrowane wystarczy, aby dodał kolejne instrukcje else if (wtedy nie ma już operacji mod, chyba że dodajemy grupę znaków). Należy dodać je w miejscu gdzie w programie widnieje odpowiedni komentarz. Po zamianie każdej litery zapisywana jest ona w pliku wyjściowym. Na końcu oba pliki są zamykane i procedura kończy się.
W przypadku procedury deszyfrującej zastosowałem trochę inną metodę. Ponieważ litera a ma numer zero. Zatem gdy odejmujemy wartość n. Uzyskujemy wynik -n. Aby uzyskać poprawny wynik wystarczy odjąć od 26 wartość bezwzględną wyniku (lub jak ktoś woli dodać tą wartość).
Poziom bezpieczeństwa: szyfr nie zapewnia bezpieczeństwa.
Metody kryptoanalizy: analiza częstości występowania poszczególnych liter.
Procedura szyfrująca/deszyfrująca
Dodałem również lekko zmodyfikowaną procedurę deszyfrującą umożliwiającą deszyfrowanie tekstu z wszystkimi możliwymi przesunięciami. Może być ona przydatna, gdy mamy jakiś szyfrogram, który jest zaszyfrowany za pomocą jakiegoś monoalfabetycznego szyfru podstawieniowego, a nie znamy przesunięcia. Po przepuszczeniu tego tekstu przez program otrzymamy tekst wynikowy, w którym wystarczy znaleźć sensowny tekst.
Procedura deszyfrująca (zmodyfikowana)

|
|