Szyfrowanie metoda Cezara i implementacja tej metody w
Transkrypt
Szyfrowanie metoda Cezara i implementacja tej metody w
Szyfrowanie metodą Cezara i implementacja tej metody w języku C++ Krzysztof RYKACZEWSKI Wydział Matematyki i Informatyki Uniwersytet Mikołaja Kopernika w Toruniu Prezentacja dostępna na http://www.mat.umk.pl/~mozgun/ Języki programowania, Toruń 29 maja 2009 Szyfr Cezara Czym jest szyfr Cezara? kryptografii, szyfr Cezara, inaczej szyfr przesuwający, to jeden z najprostszych W i najbardziej znanych szyfów Cezara jest szczególnym przypadkiem szyfru monoalfabetycznego. Znany był już w starożytności, używany między innymi przez Juliusza Cezara, rzymskiego wodza i polityka. Wspłóczesne techniki kryptoanalityczne pozwalają z łatwością złamać szyfr Cezara, a zatem nie zapewnia on żadnego bezpieczeństwa. Krzysztof Rykaczewski 1/10 Odrobina historii azwa szyfru pochodzi od Juliusza Cezara, rzymskiego N wodza i polityka. Szyfrował on listy o znaczeniu wojskowym do swoich generałów, używając szyfru przesuwającego z przesunięciem 3. Z tego powodu niekiedy szyfrem Cezara określa się wyłącznie szyfr przesuwający o przesunięciu 3, zaś termin szyfr przesuwający jest zarezerwowany dla przypadku ogólnego. Krzysztof Rykaczewski 2/10 Szyfrowanie Na czym polega szyfrowanie? szyfrze Cezara każdemu znakowi tekstu jawnego odpowiada dokładnie jeden znak W w szyfrogramie, przesunięty o określoną, stałą liczbę znaków w alfabecie. Litery z końca alfabetu stają się literami z jego początku. Przykładowo, przesuwając o 3 znaki w alfabecie łacińskim (bez polskich liter) litera A staje się literą D, litera B staje się literą E , E staje się H, L staje się O, a Y – B. Tekst jawny: Szyfrogram: Krzysztof Rykaczewski ABCDEFGHIJKLMNOPQRSTUVWXYZ DEFGHIJKLMNOPQRSTUVWXYZABC 3/10 Odszyfrowywanie Deszyfrowanie Deszyfrowanie polega po prostu na odwróceniu tej operacji. Krzysztof Rykaczewski 4/10 Treść zadania Zadanie Napisać funkcję szyfrujacą i deszyfrującą zawartość pliku tekstowego. korzystając z szyfru Cezara. Funkcje szyfrujące/deszyfrujące powinny zawierać w argumencie wskaźnik do pliku oraz liczbę całkowitą określającą o ile należy przesuwać znaki w alfabecie. Krzysztof Rykaczewski 5/10 Algorytm I 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include #include #include #include <stdio.h> <string.h> <stdlib.h> <math.h> int pomoc(int a, int b, char c){ int l = (c - b + a) % 26 + b; if (l >= b){ return l; } else { return (c - b + a) % 26 + 26 + b; } } Krzysztof Rykaczewski 6/10 Algorytm II 15 void cezar(FILE *fptr, int k, char* znaki){ 16 int i, h = 0; 17 18 while ((znaki[h] = fgetc(fptr)) != EOF){ 19 printf("%c", znaki[h]); 20 h++; 21 } 22 23 printf("\n"); 24 25 for (i = 0; i < h; i++) { 26 if ((znaki[i] >= 65) and (znaki[i] <= 90)){ 27 printf("%c", pomoc(k, 65, znaki[i])); 28 } else if ((znaki[i] >= 97) and (znaki[i] <= 122)){ 29 printf("%c", pomoc(k, 97, znaki[i])); 30 } else { 31 printf("%c", znaki[i]); 32 } 33 } 34 } Krzysztof Rykaczewski 7/10 Algorytm III 35 int main(int argc, char* argv[]){ 36 FILE *plik1, *plik2; 37 char* t; 38 39 plik1 = fopen("plik.txt", "r"); 40 41 printf("Szyfruje szyfrem Cezara:\n"); 42 43 cezar(plik1, 4, t); 44 45 fclose(plik1); 46 47 plik2 = fopen("plik2.txt", "r"); 48 49 printf("\n"); 50 51 printf("Deszyfruje szyfr Cezara:\n"); 52 53 cezar(plik2, -4, t); 54 55 fclose(plik2); 56 } Krzysztof Rykaczewski 8/10 Przykład działania programu Szyfruje szyfrem Cezara: abcdxyzABCDXYZ efghbcdEFGHBCD efghbcdEFGHBCD ijklfghIJKLFGH Deszyfruje szyfr Cezara: abcdxyzABCDXYZ efghbcdEFGHBCD wxyztuvWXYZTUV abcdxyzABCDXYZ Krzysztof Rykaczewski 9/10 Dziękuję za uwagę! Krzysztof Rykaczewski 10/10