Uvod u Jasypt

1. Pregled

U ovom ćemo članku pogledati Jasypt (Java pojednostavljeno šifriranje) knjižnica.

Jasypt je Java knjižnica koja programerima omogućuje dodavanje osnovnih mogućnosti šifriranja projektima uz minimalan napor i bez potrebe za detaljnim znanjem o detaljima implementacije protokola šifriranja.

2. Korištenje jednostavnog šifriranja

Uzmimo u obzir da gradimo web aplikaciju u kojoj korisnik šalje račun privatnim podacima. Te podatke moramo pohraniti u bazu podataka, ali bilo bi nesigurno pohranjivanje običnog teksta.

Jedan od načina rješavanja toga je pohranjivanje šifriranih podataka u bazu podataka, a prilikom dohvaćanja tih podataka za određenog korisnika dešifrira ih.

Da bismo izvršili šifriranje i dešifriranje pomoću vrlo jednostavnog algoritma, možemo koristiti BasicTextEncryptor razred iz Jasypt knjižnice:

BasicTextEncryptor textEncryptor = novi BasicTextEncryptor (); Niz privateData = "secret-data"; textEncryptor.setPasswordCharArray ("neki-slučajni-podaci" .toCharArray ());

Tada možemo koristiti šifriranje () metoda za šifriranje običnog teksta:

Niz myEncryptedText = textEncryptor.encrypt (privateData); assertNotSame (privateData, myEncryptedText);

Ako želimo pohraniti privatne podatke za datog korisnika u bazu podataka, možemo pohraniti myEncryptedText bez kršenja bilo kakvih sigurnosnih ograničenja. Ako želimo dešifrirati podatke natrag u običan tekst, možemo koristiti a dešifriraj () metoda:

Niz plainText = textEncryptor.decrypt (myEncryptedText); assertEquals (plainText, privateData);

Vidimo da su dešifrirani podaci jednaki podacima u običnom tekstu koji su prethodno bili šifrirani.

3. Jednosmjerno šifriranje

Prethodni primjer nije idealan način za provjeru autentičnosti, odnosno kada želimo pohraniti korisničku lozinku. U idealnom slučaju, želimo šifrirati lozinku bez načina da je dešifriramo. Kad se korisnik pokuša prijaviti u našu uslugu, mi šifriramo njegovu lozinku i uspoređujemo je s šifriranom lozinkom koja je pohranjena u bazi podataka. Na taj način ne trebamo raditi s lozinkom za običan tekst.

Možemo koristiti a BasicPasswordEncryptor klase za izvođenje jednosmjerne enkripcije:

Lozinka niza = "secret-pass"; BasicPasswordEncryptor passwordEncryptor = novi BasicPasswordEncryptor (); Niz encryptedPassword = passwordEncryptor.encryptPassword (lozinka); 

Zatim možemo usporediti već šifriranu lozinku s lozinkom korisnika koji izvršava postupak prijave bez potrebe za dešifriranjem lozinke koja je već pohranjena u bazi podataka:

boolean rezultat = passwordEncryptor.checkPassword ("secret-pass", encryptedPassword); assertTrue (rezultat);

4. Konfiguriranje algoritma za šifriranje

Možemo koristiti jači algoritam šifriranja, ali moramo imati na umu da za naš JVM instaliramo datoteke s pravilima o nadležnosti za neograničenu snagu Java Cryptography Extension (JCE) (upute za instalaciju nalaze se u preuzimanju).

U Jasyptu možemo koristiti snažnu enkripciju pomoću a StandardPBEStringEncryptor razreda i prilagodite ga pomoću a setAlgoritam () metoda:

StandardPBEStringEncryptor encryptor = novi StandardPBEStringEncryptor (); Niz privateData = "secret-data"; encryptor.setPassword ("some-random-passwprd"); encryptor.setAlgorithm ("PBEWithMD5AndTripleDES");

Postavimo algoritam šifriranja na PBEWithMD5AndTripleDES.

Dalje, postupak šifriranja i dešifriranja izgleda isto kao i prethodni pomoću a BasicTextEncryptor razred:

Niz encryptedText = encryptor.encrypt (privateData); assertNotSame (privateData, encryptedText); Niz plainText = encryptor.decrypt (encryptedText); assertEquals (plainText, privateData);

5. Korištenje višenitnog dešifriranja

Kada radimo na višejezgrenom stroju, želimo paralelno obrađivati ​​obradu dešifriranja. Za postizanje dobrih performansi možemo koristiti a PooledPBEStringEncryptor i setPoolSize () API za stvaranje bazena digestora. Svaki od njih može paralelno koristiti različita nit:

PooledPBEStringEncryptor encryptor = novi PooledPBEStringEncryptor (); encryptor.setPoolSize (4); encryptor.setPassword ("neki-slučajni-podaci"); encryptor.setAlgorithm ("PBEWithMD5AndTripleDES");

Dobra je praksa postaviti veličinu bazena jednakom broju jezgri stroja. Kôd za šifriranje i dešifriranje isti je kao i prethodni.

6. Korištenje u drugim okvirima

Brza završna napomena je da Jasypt Knjižnica se može integrirati s puno drugih knjižnica, uključujući naravno Proljeće Okvir.

Moramo samo stvoriti konfiguraciju za dodavanje podrške za šifriranje u našu aplikaciju Spring. A ako želimo pohraniti osjetljive podatke u bazu podataka i koristimo ih Hibernate kao okvir za pristup podacima, također se možemo integrirati Jasypt s tim.

Upute o tim integracijama, kao i s nekim drugim okvirima, mogu se naći u Vodiči odjeljak na Jasyptovoj početnoj stranici.

7. Zaključak

U ovom smo članku gledali Jasypt knjižnica koja nam pomaže u stvaranju sigurnijih aplikacija pomoću već dobro poznatih i testiranih algoritama kriptografije. Prekriven je jednostavnim API-jem koji je jednostavan za upotrebu.

Provedbu svih ovih primjera i isječaka koda možete pronaći u projektu GitHub - ovo je Maven projekt, pa bi ga trebalo lako uvesti i pokrenuti kakav jest.