Istoria criptografiei este în mod substanțial egală cu vârsta istoriei scrisului peste, deoarece este odată cu apariția scrisului este nevoie de a veni cu diferite moduri de a stoca informații într-o formă accesibilă numai unui anumit cerc de oameni. BC a fost inventat „Cezar cifru“, care a fost de a înlocui fiecare caracter în text simbolul distanțată de ea în alfabetul printr-un număr fix de posturi. Criptanaliștii cauta metode prin care să descifreze mesajele codificate. Criptografi) și (criptanaliștii Coduri (criptanaliștii) au fost în confruntare constantă: prima este inventarea constant noi cifruri, la prima vedere, inaccesibile criptanaliștii, iar acesta din urmă a găsit modalități de a decripta mesaje ascunse.
criptografie modernă constituie o zonă de cercetare separată la intersecția de matematică și informatică. Aplicarea practică a criptografiei a devenit o parte integrantă a vieții moderne - utilizarea sa în industrii, cum ar fi e-commerce, de management al documentelor electronice (inclusiv semnăturile digitale), telecomunicații și altele.
Există mai multe moduri diferite de a cripta datele. Scopul acestui laborator este de a studia software-ul care pune în aplicare metodele de criptare și decriptare a textului de către Pascal metoda triunghi Gronsfelda și matricea și stochează rezultatele de criptare (numărul de caractere criptate și secvența lor), precum și informații cu privire la metoda de criptare într-un fișier binar.
Algoritmi de criptare și decriptare
Potrivit triunghiul lui Pascal
triunghiul lui Pascal - aritmetică triunghi isoscel (Figura 4.1), format prin coeficienții binomială:
În triunghiul lui Pascal pe partea de sus și părțile laterale ale costului unitar. Fiecare număr este suma celor două numere de mai sus ea. Rânduri triunghi simetric în raport cu o axă verticală. Continuă triunghi poate fi infinit.
Criptarea are loc în conformitate cu următorul algoritm:
Propozitia alocat un alt cuvânt;
5: 1 5 10 10 5 1
6: 6 15 20 1 15 6 1
7: 7 21 35 1 35 21 7 1
8: 8 28 56 1 70 56 28 8 1
9: 9 36 84 1 126 126 84 36 9 1
10: 10 45 120 1 210 252 210 120 45 10 1
11: 11 55 165 1 330 462 462 330 165 55 11 1
12: 12 66 220 1 495 792 924 792 495 220 66 12 1
13: 13 78 286 1 715 1287 1716 1716 1287 715 286 78 13 1
Figura 4.1 - primele 15 rânduri de triunghiul lui Pascal.
1. Șirul de triunghiul lui Pascal este ales cu un număr egal cu numărul de litere din cuvântul;
2. literă k al cuvântului original este înlocuit cu litera distanțată literele inițiale ale numărului specificat în coloana k a rândului selectat din triunghiul lui Pascal (numărătoarea se face în sensul acelor de ceasornic, așa cum se arată în figura 4.2).
A B C D E F G H
H D X F T Y C P
Figura 4.2 - Schema de referință
Algoritmul de decriptare diferă numai în direcția de referință: acesta va fi invers, și anume, invers acelor de ceasornic.
Identifier Gronsfelda - este cifru de substituție complicată, care este o modificare Cezar cheie numerică cifru. Aici, pe mesajul original scrise numerele litere cheie numerice. În cazul în care cheia este mai scurtă decât mesajul, palmaresul său se repetă ciclic. Spre deosebire de Cezar cifru, unde litera criptat este considerat ca un al treilea în ordine alfabetică, aici este selectată litera alfabetului este compensat prin tasta numerică corespunzătoare.
Matricea Vigenere
matricea Vigenere este prezentată în figura 4.3. Cu referire la Caesar cifru, fiecare literă fiind criptate ar fi mutat în trei rânduri (trei schimburi), adică A ar deveni D, B ar deveni E, și așa mai departe Aici schimbarea depinde de personaje-cheie.
Figura 4.3 - Matricea Vigenere
Criptarea este după cum urmează: în matricea este căutată o coloană Vigenere care corespunde textului sursă literei, atunci șirul este litera corespunzătoare cheii și la intersecția lor va fi corespunzătoare ciphertext litere.
În timpul decriptare, șirul este primul caracter al cuvântului cheie corespunzător, iar în această linie caută primul caracter al textului criptat. Coloana în care acesta din urmă corespunde primului caracter al textului sursă. Următoarele caractere ciphertext este decriptat într-un mod similar.
Dacă literele A la Z corespund numerelor 1-32 (fără literă E), criptarea și decriptarea matricei Vigenere pot fi scrise sub forma de formule, respectiv:
în cazul în care - litera ciphertext - litera textului original - tasta litere.
Alegerea, plasare și setarea proprietăților componente.
Codurile de clase, funcții și manipulare eveniment
1. interfață de aplicație proiectată trebuie să îndeplinească cerințele de la:
· Interfață ar trebui să fie ușor de utilizat și ușor de utilizat;
· Interfața trebuie să respecte principiul universalității, ceea ce implică menținerea regulilor de bază de construcție a caracteristicii de interfață a sistemelor de dialog principale; presupunând că uniformitatea de control, uniformitatea elementelor de destinație;
· Capabilități de interfață trebuie să obnspechivat numărul minim de manipulare a utilizatorului fizice (destinate să excludă tranzițiile inutile).
2. Salvați modulul forma principală a numit LR_4, iar proiectul - numit PR_LR_4. Forma principală a aplicației este prezentată în figura 4.4. În proprietatea Caption a formularului principal înregistrate de criptare / decriptare pentru a introduce o validă Majuscule română și separator de caractere „_“. Meniul principal are un fișier secțiune (cu codul subcategoriile Open source. Deschideți textul cifrat. Ieșire), secțiunea Operațiuni (subsecțiuni de inițializare. Câmp de compensare) și secțiunea Help (subsecțiunea Despre). Pentru sub-câmpuri de curățare proprietate activată este falsă.
Figura 4.4 - forma principală de la sfârșitul design
3. Principalele comenzi de meniu utilizate cel mai frecvent (Exit. Inițializare. Câmp de compensare) sunt duplicate de pe panoul de bord localizat sub meniul principal. Nu este pur și simplu utilizat pentru bara de instrumente de proiectare. Acesta constă dintr-un simplu panou PANOU1 (Acasă Standard) cu nuda proprietate Legendă, pe care cele trei butoane plasate SpeedButton1,2,3 (pagina Advanced). Două dintre ele sunt date nume semnificative: (. A se vedea fișierul antet LR_4.h modulului principal formular) sbtnInit (SpeedButton2), sbtnClear (SpeedButton3). Icoane (imagini) sunt plasate pe butoanele de pe proprietatea Glyph respectiv a fișierelor dooropen. verifica. clar în dosarul ... Program Files \ Common Files \ Borland Shared \ imagini \ butoane. Butoanele Sugestie de proprietate enumerate de ieșire, respectiv, tooltips. inițializare, câmpuri de compensare. în proprietatea ShowHint - adevărat. Pentru butonul SpeedButton3 (compensare câmpuri) valoarea proprietății HelpType livrate la htKeyword (mod prompt de plin).
4. Transferul de formă (pagina Conversatie) componentele și SaveDialog1 OpenDialog1, dar de la pagina Standard - PopupMenu1 componente. Dublu-clic pe un PopupMenu1 componente du-te la meniul Designer (fereastra Form1-> PopupMenu1) și să facă secțiuni ale Save si Save As.
5. Restul formei principale este împărțit în trei părți aproximativ egale de componente - panouri GroupBox1,2,3 (pagina standard). În proprietatea Caption a panourilor realizate în mod corespunzător: triunghiul lui Pascal. Metoda Gronsfelda. Conform matricei.
6. Panoul de GroupBox1 dispune de două etichete Label1,2 (textul original. Textul criptat), două componente Memo1,2 Button1,2 și două butoane (pagina standard) cu inscripții (criptare. Descifrare). Specifică numele de mediu (Nume valoarea proprietății) Memo1, MeMo2 înlocuiește cu nume semnificative: TextPascal. CodedTextPascal (a se vedea. LR_4.h). Proprietatea componenta PopupMenu Memo1 PopupMenu1 valoare înregistrată. care permit prin Memo1 setat identic cu codul sursă pentru toate cele trei metode de criptare. Specifică numele de mediu (valoarea Name) Button1. Button2 înlocuiește semnificativ - btnEncryptP. btnDecryptP. iar proprietatea Enabled este setată la false.
7. Panoul GroupBox2 are trei semne Label3,4,5 (cod (3-8 cifre), original. Ciphertext), trei componente Memo3,4,5 (nume presetate mediu înlocuite edtKeyG. TextG. CodedTextG) și două butoanele Button3,4 (nume definite sunt înlocuite de mediu btnEncryptG btnDecryptG proprietate Enabled - .. fals).
8. Panoul GroupBox3 are trei semne Label6,7,8 (cheie (litere), original. Ciphertext), trei Memo6,7,8 componente (nume presetate mediu înlocuiește edtKeyM. TextM. CodedTextM) și două butoane Button5 6 (date nume de mediu sunt înlocuite cu btnEncryptM btnDecryptM proprietate Enabled - .. fals).
Figura 4.5 - o formă de „Despre“
Figura 4.6 - forma principală a rezultatelor testelor
(Începutul structurii proiectului)
(Continuarea structurii proiectului)
(Sfârșitul Proiectului)
11. Antetul main.h modulului principal
// criptare clasa / decriptarea de text
char * text; // codul sursă
char * codedtext; // ciphertext
int ** Ptriangle; // triunghiul lui Pascal
int keyG [9]; // cheie cifru Gronsfelda, într-un octet de zero -
char * keyM; // cheie pentru criptarea unei matrice
void setText (char * text); // setați textul inițial
char * gettext (); // obține codul sursă
void SetCodedText (char * text); // seta textul cifrat
char * GetCodedText (); // obține textul cifrat
void SetKeyG (char * strkey); // setați cheia pentru metoda Gronsfelda
void SetKeyM (char * strkey); // setați cheia de criptare pe o matrice
int TextLen (); // obține lungimea textului sursă
int CodedTextLen (); // obține lungimea de text cifrat
void EncryptP (); // encrypta pe triunghiul lui Pascal
void EncryptM (); // cripta matricea
nule EncryptG (); // metoda pentru a cripta Gronsfelda
nule DecryptP (); // decripta pe triunghiul lui Pascal
nule DecryptM (); // decripta matricea
nule DecryptG (); // decripta metoda Gronsfelda
> * A; // pointer la obiect de clasă
12. Fișierul de implementare modulul principal main.cpp
anula __fastcall SpeedButton1Click (TObject * Sender);
anula __fastcall N6Click (TObject * Sender);
anula __fastcall N9Click (TObject * Sender);
anula __fastcall sbtnInitClick (TObject * Sender);
anula __fastcall N7Click (TObject * Sender);
anula __fastcall sbtnClearClick (TObject * Sender);
anula __fastcall N8Click (TObject * Sender);
anula __fastcall N4Click (TObject * Sender);
anula __fastcall N5Click (TObject * Sender);
anula __fastcall btnEncryptPClick (TObject * Sender);
anula __fastcall btnDecryptPClick (TObject * Sender);
anula __fastcall btnEncryptGClick (TObject * Sender);
anula __fastcall btnDecryptGClick (TObject * Sender);
anula __fastcall btnEncryptMClick (TObject * Sender);
anula __fastcall btnDecryptMClick (TObject * Sender);
anula __fastcall FormClose (TObject * Sender, TCloseAction Acțiune);
anula __fastcall N10Click (TObject * Sender);
anula __fastcall N11Click (TObject * Sender);
privat: // declarații de utilizator
publice: // Declarații de utilizator
__fastcall TForm1 (TComponent * proprietar);
PACHET TForm1 * Form1 extern;
void __fastcall TForm2 :: Button1Click (TObject * Sender)
Testarea și utilizarea aplicației
1. Rulați aplicația privind executarea prin apăsarea rapidă pe Salvare și a alerga. Faceți clic pe forma OK „Despre“. Pe principala formă de câmpuri de curățare sub-meniuri. duplicarea butoane bara de instrumente și criptare. Decriptarea nu va fi disponibil.
2. În fereastra TextPascal (Memo1) introduceți codul sursă (a se vedea. Figura 4.6). Faceți clic dreapta pe fereastră și apelați comanda de meniu pop-up salva sau a salva ca un cod sursă de imprimare într-un fișier text. Comandă Fișier / Open codul sursă de cod sursă de imprimare în restul ferestrei de cod sursă. Echipa de operațiuni Meniu principal / de inițializare sau faceți clic pe butonul din bara de instrumente, duplicarea echipei sale operații de inițializare vor face disponibile \ câmpurile de curățare. buton din bara de instrumente câmpuri curate și criptare buton. Decriptarea. și echipa de operațiuni inaccesibile / inițializarea și butonul de inițializare.
3. Cripta codul sursă al tuturor celor trei metode, și de a salva textul criptat cu decriptarea. Pentru a face acest lucru, făcând clic pe butoanele de criptare. în fișierul caseta de dialog Salvare, specificați un nume de fișier și faceți clic pe Salvare pentru a închide fereastra.
4. decripta textele criptate. Pentru a face acest lucru, rândul său, ștergând textul original, faceți clic pe butonul Decriptarea.
5. Afișarea textelor criptate. Pentru a face acest lucru, ștergând textul criptat, introduceți comanda File \ textul criptat Deschideți și specificați numele fișierului. Asigurați-vă că operațiunile revendicarea 4 repetate. În acest test, aplicația se termină.
6. Tipul câmpurile de operare / curatare sau faceți clic pe câmpurile de compensare. Criptarea și decriptarea orice text, este de 3-4 ori mai mare de text de testare.
7. fișierul de comandă / Exit sau faceți clic pe butonul de ieșire executarea completă a aplicației.
1. Cum de a cripta textul metodei triunghiul lui Pascal Gronsfelda, matricea? Adu organigrame.
2. Cum pentru a cripta cuvântul metodei triunghiul lui Pascal Gronsfelda, matricea? Adu organigrame.
3. Cum să criptați scrisoarea de Pascal metoda triunghi Gronsfelda, matricea? Adu organigrame.
4. Așa cum afișat în criptarea fișierului?
5. Cum pentru a decripta textul criptat situat într-un fișier?
6. Ce oportunități face utilizarea modulelor în proiect fără forme? Cum pot crea un modul? Ce-l conține?
8. Cum este directiva compilare condiționată?
10. Cum este constructorul clasei?
11. Cum este destructor clasa?
12. Introduceți punctul de cod în cazul în care constructorul clasei este apelat.
13. În cazul în care și cum să modificați codul pentru a afișa numărul de apeluri către proiectantul?
14. Introduceți punctul de cod în cazul în care destructor este numit clasa.
15. În cazul în care și cum să modificați codul pentru a afișa numărul de apeluri destructor?
16. Ca și în anexă furnizează informații cu privire la cererea și dezvoltator? Dă exemple.
17. Cum link-ul de proiect, între modulele?
19. Ce oportunități sunt furnizate de clasa cercetător utilizator?
laborator 5