proiect criptografie programarea calculatoarelor

18
      CUPRINS  1.Tema proiectului.............................................................................................2 2. Specificaţii ......................................................................................................5 3. Design ...........................................................................................................7 4. Codul aplicației ............................................................................................. 11 5. Teste, erori, execuție .................................................................................... 15 6. Bibliografie ................................................................................................... 18 

Upload: mkyoya

Post on 23-Dec-2015

69 views

Category:

Documents


3 download

DESCRIPTION

Program simplu de Criptare Casar, Doua Jumatati, Prin Schimbare biti Adiacenti

TRANSCRIPT

Page 1: Proiect Criptografie Programarea Calculatoarelor

 

 

 

 

 

 

CUPRINS  

1.Tema proiectului ............................................................................................. 2 

2. Specificaţii ...................................................................................................... 5 

3. Design ........................................................................................................... 7 

4. Codul aplicației ............................................................................................. 11 

5. Teste, erori, execuție .................................................................................... 15 

6. Bibliografie ................................................................................................... 18 

Page 2: Proiect Criptografie Programarea Calculatoarelor

2  

1.TemaproiectuluiPrezentul proiect își propune executarea unui program de criptare a unui șir de caractere introdus de la tastatură, prin trei metode.

Criptarea mesajelor este unul dintre cele mai studiate domenii din zilele noastre. Complexitatea tehnicilor de criptare şi de trimitere a mesajelor creşte permanent pentru a obţine o securitate cât mai ridicată a comunicaţiilor. Pe parcursul câtorva episoade, vom prezenta unele dintre cele mai cunoscute modalităţi de codificare a mesajelor.

Criptarea mesajelor şi trimiterea lor sub această formă este utilizată de foarte mult timp. Din dovezi indirecte unul dintre primele instrumente de criptare decriptare a fost menționat de poetul grec Archilocus ce a trăit în secolul 7 î.e.n., numit scytal de la grecescul σκυτάλη (baston). Acesta era utilizat de Spartani și vechii Greci, constituind un cifru de transpoziție constând dintr-o fâșie din piele care odată înfășurată în jurul unui baston de un anumit diametru era inscripționată cu mesajul de criptat prin desfășurarea de pe baston sensul mesajului era ascuns, recipientul înfășura fâșia pe un baston de un diametru similar decriptând astfel mesajul. Evident această metodă de criptare nu era una dintre cele mai sigure acesta putând fi ușor decriptat. Unul dintre primii care au folosit tehnici de criptare bazate pe algoritmi pentru trimiterea mesajelor a fost celebrul împărat roman Cezar. În comunicarea privată cu o persoană, folosirea unui cod secret poate preveni citirea intenţionată sau neintenţionată a mesajelor de către cei care intră în posesia acestora, fie pentru că trebuie să le transporte până la destinatar, fie pentru că le interceptează în timp ce mesajul este transmis.

Criptarea reprezintă o metodă prin care un text necriptat (documente, fişiere, fraze, cuvinte etc.) este transformat, utilizând anumite metode, într-un alt text, numit text criptat, care se păstrează în această formă sau se trimite unei anumite persoane. Criptarea este utilizată cu scopul de a păstra secretul unei anumite informaţii. În cazul în care informaţia criptată ajunge şi la alte persoane, altele decât cele care trebuie să o primească sau să o păstreze, nu se poate obţine textul original decât dacă este cunoscută tehnica de criptare folosită şi, eventual, o parolă utilizată în procesul de criptare.

Criptografia este ştiinţa care foloseşte matematica pentru a cripta şi decripta informaţii; cu alte cuvinte, pentru a securiza informaţiile stocate ori transmise. Reversul medaliei este criptanaliza - ştiinţa analizării şi spargerii codurilor prin care se codifică datele. Cele două, criptografia şi criptanaliza sunt denumite generic criptologie.

Există foarte multe tehnici de criptare cunoscute de foarte multe persoane, dar cu toate acestea, pentru tehnicile avansate, datorită complexităţii algoritmilor folosiţi pentru codificare, procesul invers, cel de decriptare, este aproape imposibil de realizat.

Page 3: Proiect Criptografie Programarea Calculatoarelor

3  

Criptarea informațiilor se face cu ajutorul unui algoritm şi a unei chei de criptare. Algoritmul este o funcţie matematică folosită efectiv în procesul de criptare şi decriptare. Combinarea algoritmului cu o anume cheie de criptare dă un rezultat diferit de combinarea aceluiaşi algoritm cu o altă cheie de criptare. Tăria criptării depinde atât de tăria algoritmului, cât şi de tăria cheii de criptare. În urma criptării, informaţiile devin indescifrabile; fără a avea cheia cu care s-a efectuat criptarea, decriptarea este imposibilă (sau cel puţin aşa se vrea).

Multă vreme, eforturile criptografilor au fost dirijate spre întărirea cifrurilor prin complicarea algoritmului, combinând substituții și transpoziții asupra unor simboluri sau asupra unor blocuri (grupe de simboluri). Istoria modernă a criptografiei cunoaște numeroase inovații în această privință. Două sunt elementele ce au marcat însă cotitura semnificativă în dezvoltarea metodelor criptografice.

Primul este legat de dezvoltarea rețelelor de calculatoare, al căror stimulent extraordinar s-a manifestat atât prin presiunea exercitată de tot mai mulți utilizatori (a căror dorinţă obiectivă este păstrarea secretului și a siguranței asupra poștei electronice private, a transferului electronic de fonduri și a altor aplicaţii) cât și prin potenţarea gamei de instrumente folosite efectiv în execuția algoritmilor de cifrare.

Al doilea moment important în evoluția criptografiei moderne l-a constituit adoptarea unui principiu diferit de acela al cifrării simetrice. Whitfield Diffie şi Martin Hellman, cercetători la Univeritatea Stanford din California, prin articolul 'New Directions în Criptography', publicat în 1976 în revista IEEE Tranactions on Information Theory, au pus bazele 'criptografiei asimetrice' cu chei publice, în locul unei singure chei secrete se utilizează două chei diferite una pentru criptare și cealaltă pentru decriptare, fiind imposibilă deducerea uneia din cealaltă, una din chei este făcută publică. Doar destinatarul ce deține cea de-adoua cheie poate descifra mesajul.

În cadul prezentului proiect se vor folosi următoarele tehnici de criptare:

- Criptarea Caesar, care reprezintă o criptare prin substituție (o literă din alfabet este înlocuită de o altă aflată la o distanță fixă de cea înlocuită). De exemplu o deplasare cu cinci poziții vom obține:

A J U T O R S U N T E M I N P E R I C O L F O Z Y T W X Z S Y J R N S U J W N H T Q

- Criptarea cu două jumătăți, care reprezintă o criptare prin transpoziție (textul

împărțindu-se în două jumătăți poziționate una sub alta textul criptat citindu-se pe verticală)

Page 4: Proiect Criptografie Programarea Calculatoarelor

4  

Același text vă arăta:

1 2 3 4 5 6 7 8 9 10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

A J U T O R . S U N T E M I N P E R I C O LM . I N . P E R I C O L

A M J . U I T N O . R P . E S R U I N C T O E L

- Interschimbare a biților adiacenți, reprezintă criptare la nivel de bit constând în interschimbarea biților adiacenți în cadrul fiecărui caracter. Textul de criptat va deveni: AJUTOR SUNTEM IN PERICOL ‚…ª¨ ¡£ª ¨ŠŽ† Š¡†ƒ Œ

Page 5: Proiect Criptografie Programarea Calculatoarelor

5  

2.SpecificaţiiDimensiunea sirului prelucrat va fi de maxim 80 de caractere.

Se recomandă atenție mărită la introducerea sirului pentru criptare. Nu este recomandată utilizarea săgeților, a tastelor Insert, Home, Delete, BackSpace acestea putând conduce (datorită particularităților mediului C) la funcționarea defectuoasă a aplicației.

Aplicația va fi lansată în execuție prin comanda >projcr.exe.

Automat se va încărca meniul principal:

-== P R O G R A M C R I P T A R E ==-

Va rugam sa alegeti una dintre optiuni tastand cifra...

1. Criptare Caesar

2. Criptare cu doua jumatati

3. Criptare prin interschimbare biti adiacenti

4. Iesire

Se va selecta optiunea tastând cifra corespunzătoare opțiunii. Se recomandă tastarea unei cifre din listă, în caz contrar programul va afișa urmatorul mesaj:

Alegeti NUMAI optiunile din lista (1-4)

Apasati orice tasta pentru a continua ...

După care se va reveni în meniul principal pentru o nouă selecție.

La apăsarea opțiunii 1 se va afișa:

-== C R I P T A R E C A E S A R ==-

Introduceti textul de criptat:

Page 6: Proiect Criptografie Programarea Calculatoarelor

6  

Aplicația va astepta introducrea textului si apăsarea tastei Enter.

La apăsarea opțiunii 2 se va afișa:

-== C R I P T A R E D O U A ==-

-== J U M A T A T I ==-

Introduceti textul de criptat:

Aplicația va astepta introducrea textului si apăsarea tastei Enter.

La apăsarea opțiunii 3 se va afișa:

-== C R I P T A R E P R I N I N T E R S C H I M B A R E ==-

-== B I T I A D I A C E N T I ==-

Introduceti textul de criptat:

Aplicația va astepta introducrea textului si apăsarea tastei Enter.

La apăsarea opțiunii 4 se va afișa:

-== Parasim aplicatia ==-

Apasati orice tasta pentru a continua ...

Aplicația va aștepta apăsarea oricărei taste

Page 7: Proiect Criptografie Programarea Calculatoarelor

7  

3.DesignProgramul este structurat în 5 funcții:

int afisare_meniu(); // Afisaza meniul principal

int executa_optiune(int optiune); // Evalueaza optiunea si apeleaza functia selectata

void caesar(); //Criptare Caesar

void C_4(); //Criptare cu doua jumatati

void C_9(); //Criptare prin interschimbare biti adiacenti

Pseudocod Program Principal

1. main 2. integer optiune, rezultat 3. do 4. optiune = afisare_meniu() 5. rezultat= executa_optiune(optiune) 6. while rezulat <> 0 7. clear screen 8. write mesaj sfarsit 9. write mesaj asteptare 10. wait keypressed 11. end main

Pseudocod Funcție afișare_meniu

1. function afisare_meniu 2. integer opt 3. write titlu 4. write lista optiuni 5. input opt 6. return opt 7. end function

Page 8: Proiect Criptografie Programarea Calculatoarelor

8  

Pseudocod Funcție executa_optiune

1. function executa_optiune 2. select case of optiune 3. case 1: caesar() end function 1 4. case 2: c_4() end function 1 5. case 3: c_9()end function 1 6. case 4: end function 0 7. default 8. write mesaj avertizare 9. write mesaj asteptare 10. wait keypressed 11. end function 1 12. end case

Pseudocod Funcție caesar

1. function caesar 2. integer ofset, i 3. ofset = 3 4. character out_r[80], textcfr[80] 5. clear screen 6. write mesaj 7. write mesaj asteptare 8. if not input textcfr 9. write mesaj eroare 10. write mesaj asteptare 11. wait keypressed 12. end function 13. end if 14. for i = 0 step 1 to length of textcfr 15. if texcfr[i] is letter 16. convert textcfr[i] to upper letter 17. out_r[i] = ((textcfr[i]- `A`)+ofset)%26+`A` 18. else 19. out_r[i]=textcfr[i] 20. end if 21. end for 22. out_r[length of textcfr]=’\0’ 23. write out_r 24. write mesaj asteptare 25. wait keypressed 26. end function

Page 9: Proiect Criptografie Programarea Calculatoarelor

9  

Pseudocod Funcție c_4

1. function c_4 2. integer i,j 3. ofset = 3 4. character out_r[80], textcfr[80] 5. clear screen 6. write mesaj titlu 7. write mesaj asteptare 8. if not input textcfr 9. write mesaj eroare 10. write mesaj asteptare 11. wait keypressed 12. end function 13. end if 14. i= length of textcfr 15. if i%2 not 0 16. textcfr[i]=’ ` 17. textcfr[i+1]=’ \0` 18. i = i + 1 19. end if 20. out_r[i]=’\0’ 21. for i = 0 step 1 to (i/2) 22. out_r[2*j]=texrcfr[j] 23. out_r[2*j+1]=texrcfr[i/2+j] 24. end for 25. write out_r 26. write mesaj asteptare 27. wait keypressed 28. end function

Page 10: Proiect Criptografie Programarea Calculatoarelor

10  

Pseudocod Funcție c_9

1. function c_4 2. integer i,j 3. ofset = 3 4. character out_r[80], textcfr[80] 5. clear screen 6. write mesaj titlu 7. write mesaj asteptare 8. if not input textcfr 9. write mesaj eroare 10. write mesaj asteptare 11. wait keypressed 12. end function 13. end if 14. for i = 0 step 1 to length of textcfr 15. out_r[i]=0 16. for j = 0 step 1 to 4 17. out_r[i] = out_r[i]+(texrcfr[i] &(1<<(2*j)))<<1 18. out_r[i] = out_r[i]+(texrcfr[i] &(1<<(2*j)))>>1 19. end for 20. end for 21. out_r[length of textcfr]=’\0’ 22. write out_r 23. write mesaj asteptare 24. wait keypressed 25. end function

Page 11: Proiect Criptografie Programarea Calculatoarelor

11  

4.Codulaplicației #include <conio.h> #include <ctype.h> #include <stdio.h> #include <string.h> #define N 80 //Declarare Functii int afisare_meniu(); // Afisaza meniul principal int executa_optiune(int optiune); // Evalueaza optiunea si apeleaza functia selectata void caesar(); //Criptare Caesar void C_4(); //Criptare cu doua jumatati void C_9(); //Criptare prin interschimbare biti adiacenti void main() { int optiune, rezultat; do { optiune=afisare_meniu(); rezultat=executa_optiune(optiune); } while(rezultat!=0); clrscr(); printf("\n\n\n\n\n\n\n\n\n\n -== Parasim aplicatia ==-\n\n\n\n\n\n\n\n\n\n\n"); printf("\nApasati orice tasta pentru a continua ...\n"); getch(); } int afisare_meniu() { int opt; clrscr(); // Sterge ecranul // Afiseaza optiunile printf(" -== P R O G R A M C R I P T A R E ==-\n\n\n\n\n\n"); printf("Va rugam sa alegeti una dintre optiuni tastand cifra...\n\n"); printf("1. Criptare Caesar\n"); printf("2. Criptare cu doua jumatati\n"); printf("3. Criptare prin interschimbare biti adiacenti\n"); printf("4. Iesire\n");

Page 12: Proiect Criptografie Programarea Calculatoarelor

12  

opt=getch()-'0'; // Citim si stocam ca intreg clrscr(); return opt; // Returnam valoare citita } int executa_optiune(int optiune) { // Evaluam alegerea si apelam functia selectata switch (optiune) { case 1: caesar(); return 1; case 2: C_4(); return 1; case 3: C_9(); return 1; case 4: return 0; default: printf("Alegeti NUMAI optiunile din lista (1-4)\n"); printf("\nApasati orice tasta pentru a continua ...\n"); getch(); return 1; } } void caesar() { unsigned int ofset=3,i; char out_r [N]; char textcfr [N]; clrscr(); printf(" -== C R I P T A R E C A E S A R ==-\n\n\n\n\n\n"); printf("Introduceti textul de criptat:\n"); if(!gets(textcfr)) //Zona in care verific erorile de citire I/O { printf("Nu cred ca ai introdus corect...\n"); printf("\nApasati orice tasta pentru a continua ...\n"); getch(); return; } for (i=0;i<strlen(textcfr);i++) { if(isalpha(textcfr[i])) //Verificam daca este caracter { textcfr[i] = toupper(textcfr[i]); //Folosim functia pentru a nu avea probleme cu tipul de caractere A..Z a..z out_r[i] = ((textcfr[i]-'A')+ofset)%26+'A'; //Substituim litera } else //daca nu e litera il stochez ca atare. out_r[i]=textcfr[i];

Page 13: Proiect Criptografie Programarea Calculatoarelor

13  

} out_r[strlen(textcfr)]='\0'; //Marchez sfarsitul sirului pentru tiparire printf("%s",out_r); printf("\nApasati orice tasta pentru a continua ...\n"); getch(); } void C_4() //Criptare cu doua jumatati { int i, j; char out_r[N]; char textcfr[N]; clrscr(); printf(" -== C R I P T A R E D O U A ==-\n"); printf(" -== J U M A T A T I ==-\n\n\n\n\n"); printf("Introduceti textul de criptat:\n"); if(!gets(textcfr)) //Zona in care verific erorile de citire I/O { printf("Nu cred ca ai introdus corect...\n"); printf("\nApasati orice tasta pentru a continua ...\n"); getch(); return; } i=strlen(textcfr); //Verific daca sirul are numar par de caractere if (i%2!=0) { textcfr[i]=' '; //Daca sirul este impar adaug ' ' la sfarsit textcfr[i+1]='\0'; //Marchez sfarsitul sirului i++; } out_r[i]='\0'; //Marchez sfarsitul sirului in caz ca e par for(j=0;j<i/2;j++) { out_r[2*j+0]=textcfr[j]; //Construim sirul rezultat pentru valorile pare out_r[2*j+1]=textcfr[i/2+j];//Construim sirul rezultat pentru valorile impare } printf("%s",out_r); printf("\nApasati orice tasta pentru a continua ...\n"); getch(); } void C_9() //Criptare prin interschimbare biti adiacenti { unsigned int i,j; char out_r[N];

Page 14: Proiect Criptografie Programarea Calculatoarelor

14  

char textcfr[N]; clrscr(); printf(" -== C R I P T A R E P R I N I N T E R S C H I M B A R E ==-\n"); printf(" -== B I T I A D I A C E N T I ==-\n\n\n\n\n"); printf("Introduceti textul de criptat:\n"); if(!gets(textcfr)) { printf("Nu cred ca ai introdus corect...\n"); printf("\nApasati orice tasta pentru a continua ...\n"); getch(); return; } for(i=0;i<strlen(textcfr);i++) { out_r[i]=0; for(j=0;j<4;j++) { out_r[i]+=(textcfr[i] & (1<<(2*j+0)))<<1; //masca pentru bitii pari out_r[i]+=(textcfr[i] & (1<<(2*j+1)))>>1; // masca pentru bitii impari } } out_r[strlen(textcfr)]='\0'; printf("%s",out_r); printf("\nApasati orice tasta pentru a continua ...\n"); getch(); }

Page 15: Proiect Criptografie Programarea Calculatoarelor

15  

5.Teste,erori,execuțieProgramul va începe prin afișarea meniului principal:

În cazul selectarii unui numar în afara intervalului:

Page 16: Proiect Criptografie Programarea Calculatoarelor

16  

Pentru prima optiune programul va executa criptarea Caesar:

Pentru a doua opțiune programul va executa criptarea prin două jumătăți:

Page 17: Proiect Criptografie Programarea Calculatoarelor

17  

Pentru a treia optiune programul va executa criptarea prin interschimbare biți adiacenți:

A patra optiune va conduce la inchiderea aplicației:

Page 18: Proiect Criptografie Programarea Calculatoarelor

18  

6.Bibliografie

Note de curs

Laboratoar “Programarea Calculatoarelor”

Proiect “ Programarea Calculatoarelor”

Turbo C++ Octavian Catrina, Iuliana Cojocaru, Ed. Teora ISBN 973-601-106-9

Revista Ginfo Februarie – Martie 2002

http://en.wikipedia.org

http://www.scientia.ro/tehnologie

`