Szyfr Cezara

Jest to jedna z najprostszych technik szyfrowania. Jest to rodzaj szyfrowania podstawionego, w którym każda litera tekstu jawnego (niezaszyfrowanego) zastępowana jest oddaloną od niej o stałą liczbę pozycji w alfabecie inną literą, przy czym kierunek zmiany musi być zachowany. Nazwa szyfru pochodzi od Juliusza Cezara. Bardzo fajna sprawa, jeśli czytelnik wie o co chodzi może przejść dalej, jeśli jeszcze nie wiecie jak to wygląda zapraszam do lektury na Wikipedię.

http://pl.wikipedia.org/wiki/Szyfr_Cezara

Zaczynamy standardowo od nowego projektu. Rozstawiamy trzy „TextBoxy” w formie „MultiLine” i dwa przyciski jeden do szyfrowania, drugi do deszyfrowania. Wstawiamy Track bar a pod nim literki(Label z odpowiednimi literami), ja dodałem jeszcze label z tekstem „Przesunięcie w prawo o +” i dodatkowy label który będzie pokazywał wartość TrackBaru o wartości od 0 do 23. U mnie wyglądało to tak:

szyfr_cezara_1

 

Zrobimy teraz tak. Przejdziemy do kodu i zadeklarujemy sobie wyliczenie i określimy sobie wartość ich członków:

Do każdej literki przypisujemy odpowiedni numer. Jeśli uważacie, że pominąłem jakąś literkę i chcecie dodać „ł” czy „ś” nie krępujcie się. Pamiętajcie tylko, że wtedy trzeba track bar powiększyć i późniejsze operacje troszeczkę zmienić bo tych liter będzie więcej albo mniej jak tam chcecie. Teraz przyciskamy przycisk „szyfrowania” i tworzymy uchwyt przycisku. W tym uchwycie wpisujemy

Wygląda to tak, że nasza pętla „if” sprawdzi każdą literkę z pierwszego TextBoxu w którym wpiszemy naszą niezaszyfrowaną wiadomość i przypisze jej odpowiednio:

  • Jeśli w tekście wystąpi spacja czyli ” ” powinniśmy zostawić spacje i przepisać ją do TextBox3 aby składnia tekstu została zachowana.
  • jeśli w naszym tekście wystąpi litera Funkcja „zaszyfruj” zamieni nam ją na odpowiednio przesuniętą literę. (element- nasza litera z niezaszyfrowanej wiadomości, trackBar1.value – wartość przesunięcia)

Teraz stworzymy Funkcję która będzie nam podmieniać literki. Wygląda ona tak:

Nasza funkcja sprawdzi każdą literę z naszego Enum jeśli „if” dojdzie do zdarzenia ,że litera pobrana z pętli inicjatora funkcji będzie identyczna jak ta z Enum  zwróci nam odpowiednio przesuniętą literę. („return”) Tutaj mamy taką sytuacje, że nasza litera może wyjść poza zakres naszego Enum. Trzeba coś zrobić aby temu przeciwdziałać i jednocześnie zaczynać liczenie od nowa. Przykładem takiej sytuacji jest przesunięcie większe niż połowa liczebności naszego zbioru Enum. Jeśli litere s która jest na pozycji 18 będziemy chcieli przesunąć o 10 to oczywiście suma takiego przesunięcia będzie 28 co wykracza poza zakres Enum w którym mamy tylko 24 pozycje. należy od tego 28 odjąć 24 co spowoduje,że pozycja naszej litery będzie równała się 4 czyli „d” a więc przesunięcie będzie zachowane. jeśli nie wprowadzimy tutaj pętli jak w przepisie wtedy nasze litery mogą wykraczać poza zakres co spowoduje wystąpieniem błędu.

Jeśli z Enum chcemy wydobyć informacje na jakiej pozycji stoi nasza litera albo jaką dana litera ma pozycja możemy użyć odwołania:

TextBox2.Text = LetterType.a ”zwróci nam wartość 1
TextBox2.Text = LetterType.a.ToString ”zwróci nam warość „a”
CType(1, LetterType) ”zwróci nam wartość 1
CType(1, LetterType).ToString ”zwróci nam wartość „a”

Teraz możemy sprawdzić nasz program:

szyfr_cezara_2

Po głębszym przeanalizowaniu naszych metod użytych w Uchwycie przycisku i funkcji na pewno każdy z was będzie mógł bez trudu zrobić metody deszyfrujące. Ale dla leniwych dołączam je tutaj:

i oczywiście kod do tego dodatkowego labelu tóry pokazuje wartość przesunięcia:

Gotowy program/kod pobieramy tutaj :szyfr_cezara

Filmik prezentujący jak to działa zobaczymy tutaj:

Permalink do tego artykułu: https://visualmonsters.cba.pl/szyfr-cezara/

Dodaj komentarz

Twój adres email nie będzie publikowany.