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

Podobne dokumenty