Szyfrowanie za pomocą zmiany numeru znaku, zmiana losowa.

W przykładzie tym posłużymy się funkcją: ASC zwraca ona wartość całkowitą reprezentującą znakowy kod. Aby przybliżyć wam tą myśl należy zrobić sobie pewien przykład. Każdy znak w komputerze ma swoją wartość w tabeli znaków:

Mając wartość całkowitą znaku możemy ją zmieniać. i tak jeśli chcielibyśmy zmienić prosty tekst „Ala” na reprezentacje ASC naszego napisu będzie on wyglądał następująco:

ala = 97, 108 , 97

Jeśli ktoś pamięta szyfr Cezara pamięta również, że polegał on na przesunięciu liter alfabetu o daną liczbę w prawo albo w lewo. Tak więc jak przesuniemy nasze wartości o 4 w prawo otrzymamy

ala = 97, 108 , 97 || +4 = 101, 112, 101 = epe || -4 = ala

Jeśli jesteście zainteresowani jakie znaki kryją się pod niektórymi wartościami całkowitymi zapraszam na wikipedie: http://pl.wikipedia.org/wiki/ASCII

Znaków w naszej tabeli znakowej ASCII jest 255 więc nie aż tak dużo jak się można było spodziewać. Niestety kod w którym dodajemy/odejmujemy jakąś wartośc jest dość prosty do złamania a kod w którym przesuwamy wartości za pomocą klucza już był i po skończeniu tego tutoriala i poprzedniego o szyfrowaniu za pomocą klucza każdy dobrze zorientowany programista da sobie rade zrobić taki program bo będzie wiedział jak one działają. Zastosujemy sobie szyfr podstawieniowy czyli za jakiś znak podstawimy sobie inny znak, wielkim minusem tej metody jest klucz publiczny który będziemy musieli generować co wiązać się może z jego przechwyceniem przez osobę trzecią. Ilustruje to obrazek poniżej:

asc1

Wygląda to tak: Osoba A szyfruje wiadomość, używając szyfru podstawieniowego, czyli za każdy rodzaj znaków w wiadomości podstawi inny znak. Czyli za wszystkie „a” podstawi „g”, za „b” podstawi „t” itd. Niestety do odczytania takiej zaszyfrowanej wiadomości musi utworzyć instrukcje (klucz) za pomocą której  osoba B odczyta taką wiadomość. W przypadku kodu z kluczem użytkownik A mógł bez przeszkód zadzwonić do B i powiedzieć mu przez telefon klucz albo powiedzieć mu klucz gdy się spotkają. Niestety w tym wypadku instrukcja może być za długa lub znaki mogą być zbyt skomplikowane/długa aby je zapamiętać, również generowanie jednego klucza dla wszystkich wiadomości może być niebezpieczne. Dlatego dla każdej wiadomości musi być generowany oddzielny klucz co zwiększa bezpieczeństwo. Osoba trzecia C aby odczytać wiadomość musi przechwycić wiadomość i klucz w innym wypadku nie odczyta wiadomości, niestety osoba B aby odczytać wiadomość musi również dostać klucz.

Aby utworzyć taki klucz posłużymy się tabelą. Podobnie jak podczas losowania liczb bez powtórzeń: https://visualmonsters.cba.pl/index.php/losowanie-bez-powtorzen-lotto/

Jak pamiętamy w ASCII mamy tylko 255 znaków więc należy utworzyć tabelę o wielkości 255. Następnie na na numerze naszego znaku zaszyfrowanego np a ma numer w ASCII równy 97 tak więc na naszej komórce 97 wpiszemy sobie nasz znak szyfrujący.

asc2

Program najpierw generuje numer całkowity znaku w ASCII ( a=97) następnie do numeru w tabeli o numerze ASCII dla znaku wpisuje znak podstawieniowy.

Dobra wiemy jak to zrobimy więc do dzieła. Robimy nowy projekt, dodajemy dwa Textboxy z opcją „Multiline” i jeden przycisk:

asc3

Przechodzimy do kodu naszego programu. Najpierw inicjujemy tabele o rozmiarze 255

W pierwszym textboxie będziemy wpisywać tekst następnie tekst zaszyfrowany pojawi nam się w textboxie 2-gim. Aby tego dokonać tworzymy sobie uchwyt do przycisku „Szyfruj”:

Teraz Stworzymy sobie funkcję szyfrującą:

Powinno działać:

asc4

Chyba dosyć dobrze zaszyfrowany. Aby to wam lepiej przedstawić do naszego projektu dodałem Listbox w którym wypisałem wszystkie elementy naszej tabeli Klucz:

asc5

Teraz musimy dodać możliwość zapisywania (wiadomości i klucza) i wczytywania aby to zrobić dodajemy do naszej formy z przybornika:

– Open file dialog (Otworz)

– Save file dialog (Zapisz)

asc6Dodajemy dwa przyciski: Otwórz i Zapisz

asc7

Teraz tworzymy uchwyty dla naszych przycisków i kolejno dla przycisku „Otwórz”:

Dla przycisku „Zapisz”:

U mnie wszystko działało więc i u was powinno. Teraz dodamy przycisk do rozszyfrowania naszej wiadomości:

asc8

i jego zdarzenie:

Wszystko powinno działać bez problemu. Teraz wystarczy dodać małą funkcjonalność dla naszego programu, czyli:

– Jeśli użytkownik przyciśnie „Otwórz” czyść textbox: Wiadomość.

– Jeśli użytkownik zacznie wpisywać wiadomość czyść textbox: Zaszyfrowana wiadomość .

– Zapisz: czyść wszystko.

– Przycisk do resetowania ustawień.

Po przeróbce mój program wygląda tak:

ascMam nadziej, że załapaliście i wiecie jak przerobić je na hasło klucz. Taki jak w tym tutorialu: https://visualmonsters.cba.pl/index.php/szyfr-z-kluczem/ Jeśli będziecie mieli problem warto niedługo tutaj zajrzeć a opublikuje taki przykład. Standardowo do pobrania cały projekt tutaj: Szyfr_podstawieniowy_ASCII

 

 

 

 

 

Permalink do tego artykułu: https://visualmonsters.cba.pl/szyfrowanie-za-pomoca-zmiany-numeru-znaku-zmiana-losowa/

Dodaj komentarz

Twój adres email nie będzie publikowany.