0% au considerat acest document util (0 voturi)
19 vizualizări8 pagini

SI Lab01 Raport

Lucrarea prezintă implementarea a trei algoritmi de criptare clasici: cifrul lui Cezar, cifrul lui Vigenere și cifrul lui Vernam. Sunt descrise metodele de criptare și decriptare pentru fiecare algoritmu, iar programul în Java demonstrează funcționarea acestora.

Încărcat de

Adrian Bodorin
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
19 vizualizări8 pagini

SI Lab01 Raport

Lucrarea prezintă implementarea a trei algoritmi de criptare clasici: cifrul lui Cezar, cifrul lui Vigenere și cifrul lui Vernam. Sunt descrise metodele de criptare și decriptare pentru fiecare algoritmu, iar programul în Java demonstrează funcționarea acestora.

Încărcat de

Adrian Bodorin
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd

Ministerul Educaţiei, Culturii și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei

Departamentul Informatică și Ingineria Sistemelor

RAPORT
Lucrarea de laborator nr.1
la Securitatea Informațională

A efectuat:
st. gr. IA-171 Bodorin Adrian

A verificat:
[Link]., dr. M. Kulev

Chişinău – 2019

0
Lucrarea de laborator nr. 1

Tema: Metode simmetrice de criptare. Cifruri de substituție

Scopul lucrării: Acumularea deprinderilor practice de elaborare şi programare a alogoritmelor de


criptare simmetrică utilizînd cifruri de substituție.

Obiective:
 înţelegerea şi familiarizarea cu tehnica de criptare prin cheie secretă;
 realizarea criptării şi decriptării mesajelor folosind metoda cifrului lui Cezar;
 realizarea criptării şi decriptării mesajelor folosind metoda cifrului lui Vigenere;
 realizarea criptării şi decriptării mesajelor folosind metoda cifrului lui Vernam;

Mersul lucrării:

Noţiuni principale din teorie şi metode folosite:

Cifrul de substituţie (substitution cipher) - este cifrul bloc la care


fiecare caracter sau grup de caractere ale textului clar m este substituit cu un alt caracter sau grup de
caractere în textul cifrat c, descifrarea făcându- se prin aplicarea substituţiei inverse asupra textului
cifrat. În criptografia clasică există patru tipuri de cifruri de substituţie. Deosebim cifruri cu substituţie
monoalfabetică şi polialfabetică.

Cifruri de substituţie monoalfabetică (monoalphabetic ciphers) – sunt cifrurile în care fiecare


caracter al textului în clar m este înlocuit cu un caracter corespunzător în textul cifrat c.

Descrierea variabilelor și funcțiilor a programului:


 Clasa Main conține doar o singură metodă – main în care se află un meniu de navigare a
programului, precum și toate input-urile utilizatorului. Alegând una din opțiuni, tabloul de
caractere introdus de utilizator, precum și cheia, sunt trimise ca parametri în metodele claselor
externe.
 Clasa [Link] conține metodele encrypt(String message, char key), decrypt(String
message, char key), și printMessage(), care nu are parametri.
 Clasa [Link] conține metodele: enCrypt(String message, char key), deCrypt(String
message, char key).
 Clasa [Link] conține metodele: enCrypt(String message, char key).
 Clasa [Link] conține doar o singură variabilă statică Alphabet în care sunt toate
literele minuscule ale alfabetului englez.

Codul (textul) programului în limbajul de programare Java:


package [Link];
import [Link];
import [Link];
import [Link];
public class Main {
public static void main(String[] args) throws IOException {

1
[Link]("Introduceti mesajul pentru a fi criptat:");
Scanner input = new Scanner([Link]);
String message = [Link]();
int choice = 0;
do {
[Link]("\nMesajul: " + message);
[Link]("Alegeti o optiune de criptare:");
[Link]("1. Metoda lui Cezar");
[Link]("2. Metoda lui Vigenere");
[Link]("3. Metoda lui Vernam");
[Link]("9. Modificati mesajul");
[Link]("0. Iesire din program");
try {
choice = [Link]();
} catch (Exception ex) {
[Link]("Introduceti un numar!\n");
}
switch (choice) {
case 1 : {
[Link]("Introduceti cheia de criptare:");
char key = (char)[Link]();
[Link]("\nCriptare:");
String result = [Link](message, key);
[Link]("\nDecriptare:");
[Link](result, key);
break;
}
case 2 : {
[Link]("Introduceti cheia:");
[Link]();
String viginereKey = [Link]();
[Link]("\nCriptare:");
String viginereCypher = [Link](message, viginereKey);
[Link]("Mesajul criptat:\n" + viginereCypher);
[Link]("\nDecriptare:");
[Link](viginereCypher, viginereKey);
break;
}
case 3 : {
[Link]();
[Link](message, new Random(7));
[Link]();
break;
}
case 9: {
[Link]("\nIntroduceti mesajul nou:");
[Link]();

2
message = [Link]();
break;
}
case 0 : { break; }
default : {
[Link]("Alegeti o optiune valida!\n");
}
}
} while (choice != 0);
}
}
package [Link];
import [Link];
import [Link];
class Cezar {
static String encrypt(String message, char key) {
String toCrypt = [Link]();
int keyNum;
keyNum = [Link]([Link](key));
List<Integer> numericMessage = new ArrayList<>();
StringBuilder crypted = new StringBuilder();
for (int i = 0; i < [Link](); i++) {
if ([Link](i) != ' ') {
int messageCharCode = [Link]([Link](i));
int replacedCharCode = (keyNum + messageCharCode) % 26;
char replacedChar = [Link](replacedCharCode);
[Link](replacedCharCode);
[Link](replacedChar);
} else {
[Link](" ");
}
}
printMessage(message, key, numericMessage, crypted);
return [Link](crypted);
}
static void decrypt(String message, char key) {
String toDeCrypt = [Link]();
int keyNum = [Link]([Link](key));
List<Integer> numericMessage = new ArrayList<>();
StringBuilder deCrypted = new StringBuilder();
for (int i = 0; i < [Link](); i++) {
if ([Link](i) != ' ') {
int messageCharCode = [Link]([Link](i));
int replacedCharCode = (messageCharCode - keyNum) % 26;
if (replacedCharCode < 0) {
replacedCharCode = [Link]() + replacedCharCode;
}

3
char replacedChar = [Link](replacedCharCode);
[Link](replacedCharCode);
[Link](replacedChar);
} else {
[Link](" ");
}
}
printMessage(message, key, numericMessage, deCrypted);
}
private static void printMessage(String message, char key, List<Integer> numericMessage,
StringBuilder output) {
[Link]("Mesajul:\n" + message);
[Link]("Cheia: " + key);
[Link]("Valorile numerice ale mesajului (cu cheia luata in consideratie):");
[Link](numericMessage);
[Link]("Mesajul dupa prelucrare:\n" + output);
}
}
package [Link];
class Viginere {
static String enCrypt(String text, final String key) {
StringBuilder res = new StringBuilder();
text = [Link]();
for (int i = 0, j = 0; i < [Link](); i++) {
char c = [Link](i);
if (c < 'A' || c > 'Z') continue;
[Link]((char) ((c + [Link](j) - 2 * 'A') % 26 + 'A'));
j = ++j % [Link]();
}
return [Link]();
}
static void deCrypt(String text, final String key) {
StringBuilder res = new StringBuilder();
text = [Link]();
for (int i = 0, j = 0; i < [Link](); i++) {
char c = [Link](i);
if (c < 'A' || c > 'Z') continue;
[Link]((char) ((c - [Link](j) + 26) % 26 + 'A'));
j = ++j % [Link]();
}
[Link]("Cheia: " + key + "\nMesajul decriptat:\n" + res);
}
}
package [Link];
import [Link];
class Vernam {
static void enCrypt(String message, Random r) {

4
char c;
StringBuilder cipher = new StringBuilder([Link]());
for (int i = 0; i < [Link](); i++){
c = [Link](i);
if ([Link](c))
[Link]( (char)(([Link](c) - 'A' + (int)([Link]() * 26)) % 26 +
'A'));
else
[Link](c);
}
[Link]("Mesajul criptat:\n" + [Link]());
[Link]("\nMesajul decriptat:");
for (int i = 0; i < [Link](); i++) {
[Link]([Link]()[i]);
}
}
}
package [Link];
class CryptUtils {
static String Alphabet = "abcdefghijklmnopqrstuvwxyz";
}
Testarea programului și rezultatele obtinute:
Cezar :

Viginere:

5
Vernam:

6
Analiza rezultatelor si concluzii:

În această lucrare de laborator noi ne-am învățat să implementăm 3 algoritmi de criptare: Cezar,
Viginere și Vernam. Acestea sunt algoritmi de substituție, adică fiecare caracter din mesaj se înlocuiește
cu altul. Aceasta se face cu ajutorul unei astfel numite cheie de criptare. Tot cu această cheie mesajul
poate fi decriptat. Implementarea algoritmilor aceștia am efectuat-o în limbajul de programare Java.
Pentru fiecare algoritm am creat o clasă respectivă care îl reprezintă. Fiecare astfel de clasă are cel
puțin 2 metode – una pentru criptare și una pentru decriptare. În metoda main, am creat un meniu de
navigare a programului în care utilizatorul poate să introducă mesajul, cheia de criptare și să aleagă
metoda cu care dorește să cripteze mesajul.

Bibliografie:

1. Popa S. E. Securitatea sistemelor informatice: note de curs şi aplicaţii pentru studenţii Facultăţii de
Inginerie. Universitatea din Bacău, 2007. – 136 p.
[Link]

S-ar putea să vă placă și