algorytm.org

Szyfr z dowolnym przesunięciem

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?

Szyfr z dowolnym przesunięciem
Ocena użytkowników:***** / 4
SłabyŚwietny 
Wpisany przez Krzysztof Maćkowiak, 17 sierpnia 2005 23:57

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 przypadku szyfru Cezara czy 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 według kod 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 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

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.

Oto przykładowy ciąg poddany działaniu algorytmu:

Tekst jawny: Algorytmy i Struktury Danych
Tekst zaszyfrowany (przesuniecie 7): HsnvyfatfpZaybrabyfKhufjo
Tekst zaszyfrowany (przesuniecie 15): PavdgnibnxHigjzijgnSpcnrw
Tekst zaszyfrowany (przesuniecie 23): XidlovqjvfPqorhqrovAxkvze

Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Krzysztof MaćkowiakC/C++
.cpp
.cpp
***** / 2
Marek MadejskiPython
.py
.py
***** / 1
Nikodem SolarzRubyMetoda szyfrująca i deszyfrują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: 21 czerwca 2011 19:03
Dodaj komentarz