szyfr z kluczem

szyfr_z_kluczemProgram szyfrujący można pobrać tutaj: szyfr_z_kluczem_exe

Działa na Windows 7+

 

 

 

 

 

 

 

 

Szyfr cezara opisany tutaj można łatwo złamać. im dłuższa jest wiadomość tym łatwiej ją rozszyfrować. Wystarczy policzyć liczebność poszczególnych liter i sprawdzić jakie liczby w danym języku najczęściej występują.

700px-Polish_letters_frequencies.svg

 

jak widzimy w języku polskim najczęściej występującymi literami są „a”,”e”,”i”,”o” wystarczy,że namierzymy jakąś pojedyńczą literę i ją dopasujemy do układanki. Układ w Szyfru cezara wyglądał następująco:

a , b, c , d , e ,  f , g , h , i , j , ….      dla przesunięcia o 3 w prawo otrzymywaliśmy

x , y ,  z , a , b , c , d , e , f , g ….      nasze „a” zamieniało się w „d”, „d” zamieniało się w „g” i tak dalej.

Tak więc na dłuższą metę system ten się nie sprawdzał. im więcej mamy tekstu za hasłowanego tym łatwiej go złamać. Lepszą metodą jest szyfr z kluczem. Polega on także na przesuwaniu liter ale sekwencja ich przesuwania jest zakodowana w kluczu.

Ustawmy nasze słowo kluczowe na „suzuki”, sprawdzamy teraz w swoim alfabecie na jakich pozycjach stoją litery naszego słowa. U mnie było to „18 , 21 , 24 , 21 , 11 , 9”. nasz klucz będzie szyfrował pierwszą literę  przesuwając ją w prawo o 18 potem drugą przesuwając w prawo o 21 następną o 24 itd. zakodowanie wiadomości: „kocham kryptografie” przesunie nam nasze litery o:

KOCHAM KRYPTOGRAFIE

18,21,24,21,11,9 18,21,24,21,11,9,18,21,24,21,11,9

ELCELX ENYMFZANACWN

Fajne prawda. Tekst tak za hasłowany jest dużo trudniejszy do złamanie. Ale nie niemożliwy. Nasz program do szyfrowania będzie wyglądał tak:

szyfr z kluczem

 

Będzie on trochę bazował na kodzie z programu w tym dziale: „Szyfr Cezara” więc warto zapoznać się z jego budową. Układamy wszystkie elementy tak jak na obrazku powyżej. 8 TextBoxów w tym 5 z zaznaczonym MultiLine, i dwa przyciski „Button”. warto robić to na bazie programu opisanego we wcześniejszym poście „Szyfr Cezara”. zachowujemy obie funkcje i Enum:

Sytuacja zmienia się trochę podczas przyciskania przycisku. wcześniej w naszej sentencji:

nasze przesunięcie było stałe o wartość jaką miał TrackBar1. My chcemy aby ta wartość była zmienna (zależna od klucza). Najpierw musimy wydobyć z klucza informacje nam potrzebne. W tym celu zainicjujemy sobie tablice która będzie przechowywała nam cyfry (integer) odpowiednio dopasowane do naszego Enum. kod poniżej pokazuje nam jak to osiągnąć:

  1. Inicjujemy tablice
  2. Wyodrębniamy litery z TextBox4 (klucza)
  3. Sprawdzamy czy istnieje powiązanie między kluczem a Enum. Jeśli tak do naszej tablicy „klucz” wstawiamy odpowiednią cyfrę przypisaną dla niej w Enum.
  4. Dodajemy wyodrębnioną cyfrę z Enum do naszej tablicy
  5. Wypisujemy nasz klucz w formie cyfrowym w TextBox5.

Po odpaleniu wszystko powinno działać. Sprawdźcie sami czy to działa. U mnie wyglądało to tak:

szyfr z kluczem2

Teraz należy te liczby z tablicy wykorzystać do szyfrowania. Czyli tutaj:

Najpierw dodamy sobie zmienną która będzie nam badała położenie na jakim znajdujemy się w tablicy:

Do elementów tablicy odwołujemy się w następujący sposób:

Tak więc aktualne przesunięcie litery będzie odbywało się poprzez połączenie „klucza” i „polozenieWKluczu”.

a zmianę przesunięcia będziemy kontrolować poprzez dodanie do naszego „polozenieWKluczu +=1”

Całość wygląda tak:

nasza pętla „IF” mówi, że jeżeli położenie klucza będzie większe niż ilość zawartych w nim cyfr należy do naszej zaszyfrowanej wiadomości dodać literę z przesunięciem „klucz(0)” i zacząć liczyć nasze „polozenieWKluczu” od 1. jeśli polożenie w kluczu nie nie jest większe od jego liczebności użyj przesunięcia klucz(polozenieWKluczu) i zwiększ „polozenieWKluczu” o jeden. ostatecznie wygląda to tak:

 

Kod do deszyfrowania jest analogiczny.

wygląda to tak:

a pełen kod pobieramy: szyfr_z_kluczem_poprawiony

obrazek pobrany ze strony: http://pl.wikipedia.org/wiki/Alfabet_polski

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

Dodaj komentarz

Twój adres email nie będzie publikowany.