Criptarea cu cheia publică și privată

Aș dori să remarcă imediat că criptarea este o știință destul de complicată și, bineînțeles, nu putem lua totul în minte într-o singură lecție. Dar vom analiza baza, adică modul de implementare a mecanismului de criptare, folosind cheia publică și privată.





Deci, sistemele de criptare cu cheie deschisă și privată au fost inventate în anii '70. Asta este - au existat sisteme care oferă transmisia de mesaje criptate, pentru decriptarea cărora era necesar să se utilizeze o cheie diferită de cheia de criptare. Aceasta a fost principala diferență între noile sisteme și cele vechi, în care a fost utilizată o singură cheie - pentru criptarea și decriptarea mesajului.






În sistemele de criptare a cheilor publice, este utilizat un script care criptează datele utilizând o cheie publică. Cheia publică este un cod, care acționează direct ca o instrucțiune pentru criptarea mesajului. Cheia publică este creată de scriptul de criptare, iar pentru fiecare utilizator este unic - unic.

Criptarea cu cheia publică și privată

Cadrul YII2. Dezvoltare rapidă cu cadrul PHP modern

Aflați complexitatea dezvoltării web moderne cu ajutorul cadrului YII2

După ce mesajul este criptat, acesta poate fi decriptat numai cu cheia privată.

Criptarea cu cheia publică și privată

Fiți atenți la figura (de mai sus) - acesta este schema de funcționare a sistemului de criptare cu o cheie deschisă și privată.

Deci, de exemplu, trebuie să trimiteți un mesaj criptat unui anumit utilizator. În primul rând, trebuie să obțineți cheia publică de la acest utilizator. După ce ați primit această cheie, utilizați scriptul de criptare - criptați mesajul și trimiteți-l utilizatorului. Pentru a decripta mesajele, utilizatorul folosește cheia privată. În acest caz, nu puteți utiliza cheia publică pentru a decripta mesajul. Aceasta înseamnă că numai destinatarul mesajului poate citi mesajul utilizând cheia privată.

Astfel, cheia privată în combinație cu scriptul de criptare este folosită pentru a decripta mesajul criptat cu cheia publică a utilizatorului. Fără a cunoaște cheia privată, este imposibil să decriptați fișierul criptat.

Ce va face să lucreze?

În lecția de astăzi pentru implementarea mecanismului de criptare, vom folosi extensia limbajului PHP - OpenSSL.

În general, OpenSSL este un sistem de protecție și certificare a datelor. SSL este tradus ca un strat socket securizat. OpenSSL este folosit de aproape toate serverele de rețea pentru a proteja informațiile transmise și acesta este un sistem destul de complex și extins. În lecția de astăzi, vom lua în considerare doar acele puncte care afectează criptarea datelor.

După aceea, nu uitați să reporniți serverul web. Dacă utilizați pachetul denwer, în versiunea sa de bază, atunci cel mai probabil nu aveți această extensie. Trebuie să descărcați și să instalați pachetul de extensii pentru versiunea dvs. de denwer (acest pachet poate fi descărcat de pe site-ul oficial).

Criptarea cu cheia publică și privată

Generarea de chei

Deci, primul lucru, trebuie să generați cheile. Pentru a face acest lucru, vom crea fișierul Enc.class.php și vom crea o clasă care va fi nucleul logic al scriptului nostru:

Acest lucru creează o clasă statică în get_keys () metoda pe care le vom folosi pentru a genera chei și menținerea lor într-un fișier text (acest lucru presupune că această metodă se numește doar o singură dată - pentru generarea și cheie în fișiere text de înregistrare). Primul lucru pe care îl creăm este o serie de config-uri, adică setăm opțiunile când creăm o cheie privată:

Indică cheia de tip OPENSSL_KEYTYPE_RSA (cheia privată pentru a cripta publicului și chei private) și dimensiunea în biți a cheii de viitor (512 biți). Apoi, generați cheia privată și returnați mânerul:

Extrageți valoarea cheii din descriptorul său:

Funcția openssl_pkey_export () - returnează cheia privată ca șir și această linie este stocată în variabila $ privKey, care este trecută de al doilea argument al acestei funcții. Primul parametru este descriptorul cheie. Acum, să creăm fișierul index.php și să afișăm valoarea variabilei $ privKey (în metoda get_keys (), retur temporar valoarea cheii private):

Iată ce vom vedea pe ecran:

Criptarea cu cheia publică și privată

Criptarea cu cheia publică și privată

Cadrul YII2. Dezvoltare rapidă cu cadrul PHP modern

Aflați complexitatea dezvoltării web moderne cu ajutorul cadrului YII2

Apoi salvați cheia primită într-un fișier text.

Acum, dacă actualizăm scriptul din nou, vom vedea că a fost creat un fișier text în care cheia privată a fost salvată. Apoi, trebuie să generați o cheie publică. Pentru aceasta, creați o solicitare pentru un certificat - CSR (Cerere de semnare certificat). Care este un text criptat care conține informații despre companie, nume de domeniu etc. Această solicitare este necesară pentru achiziționarea unui certificat SSL emis de autoritățile de certificare. Pentru a crea o solicitare CSR, trebuie să creați o matrice cu următoarele date:

"CountryName" => "UA" - cod de țară format din două cifre;

"StateOrProvinceName" => "Regiunea Kievskaya" - regiune sau regiune;

"LocalityName" => "Kiev" este un oraș;

"OrganizationName" => "Organization" - numele companiei;

"OrganizationalUnitName" => "Soft" - numele departamentului;

"CommonName" => "localhost" - numele de domeniu;

Apoi, creați o interogare CSR:

Rețineți că trebuie să treci funcțiile openssl_csr_new (), matricea creată anterior și cheia privată. Apoi, vom crea un certificat:

Funcția openssl_csr_sign - returnează descriptorul certificatului generat. Este nevoie să treacă următorii parametri: $ cerere responsabilitatea socială pe viitor în materie de RSI, NULL - înseamnă că certificatul rezultat va fi certificat auto a generat, $ privKey - cheia privată, 10 - relevanța certificatului de timp în aceste zile. openssl_x509_export () funcție - trageți mânerul $ certificatul CertificatAcreditat și păstrați-l în $ str_cert variabila. Apoi, generați o cheie publică:

openssl_pkey_get_public () returnează un mâner pentru cheia publică (pe baza unui certificat obținut anterior), și funcția openssl_pkey_get_details () returnează o matrice în care celula cheie conține o cheie publică. Să vedem cum arată:

Apoi, scrieți cheia publică într-un fișier și returnați matricea cu tastele:

Criptarea datelor

Pentru criptare, adăugăm metoda my_enc ():

După cum puteți vedea, aici citim cheia publică dintr-un fișier text și sunăm funcția openssl_public_encrypt (), care criptează datele cu o cheie publică. Parametrii care trebuie trecuți la acesta: $ str - string pentru criptare; $ result - variabila în care vor fi stocate rezultatele și $ pub_key - cheia publică.

Decriptarea datelor

Ca de obicei, vom crea o nouă metodă:

Primul pas este de a obține o cheie privată dintr-un fișier text și apel openssl_private_decrypt funcția (), care decriptează datele cheie private. Parametrii care trebuie să-i spun $ str - șir pentru a decripta, $ variabila de rezultat, în care rezultatul, $ pr_key vor fi salvate - cheia privată.

Testarea scenariului

Acum, să adăugați codul de index.php, și anume, de a crea o criptare șir și de apel metode în mod consecvent my_enc (), criptarea și my_dec () decriptarea (codul complet al index.php):

Acum, să vedem ce avem:

După cum vedeți, totul a funcționat cu succes. Aceasta conchide această lecție. Toate cele mai bune pentru tine și codare bună.

Criptarea cu cheia publică și privată

Cadrul YII2. Dezvoltare rapidă cu cadrul PHP modern

Aflați complexitatea dezvoltării web moderne cu ajutorul cadrului YII2

Cele mai recente știri despre dezvoltarea IT și web pe canalul nostru de telegrame







Articole similare

Trimiteți-le prietenilor: