Inleiding tot Jasypt

1. Overzicht

In dit artikel zullen we kijken naar de Jasypt (Java Simplified Encryption) bibliotheek.

Jasypt is een Java-bibliotheek waarmee ontwikkelaars met minimale inspanning basisversleutelingsmogelijkheden aan projecten kunnen toevoegen, zonder dat ze diepgaande kennis nodig hebben over implementatiedetails van versleutelingsprotocollen.

2. Met behulp van eenvoudige codering

Overweeg dat we een webtoepassing bouwen waarin de gebruiker de privégegevens van een account indient. We moeten die gegevens in de database opslaan, maar het zou onveilig zijn om platte tekst op te slaan.

Een manier om ermee om te gaan, is door versleutelde gegevens in de database op te slaan en bij het ophalen van die gegevens voor een bepaalde gebruiker deze te ontsleutelen.

Om codering en decodering uit te voeren met behulp van een heel eenvoudig algoritme, kunnen we een BasicTextEncryptor klasse uit de Jasypt-bibliotheek:

BasicTextEncryptor textEncryptor = nieuwe BasicTextEncryptor (); String privateData = "geheime gegevens"; textEncryptor.setPasswordCharArray ("enkele-willekeurige-gegevens" .toCharArray ());

Dan kunnen we een versleutelen () methode om de platte tekst te versleutelen:

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

Als we privégegevens voor een bepaalde gebruiker in de database willen opslaan, kunnen we een myEncryptedText zonder enige beveiligingsbeperking te schenden. Als we gegevens terug willen decoderen naar een platte tekst, kunnen we een decoderen () methode:

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

We zien dat gedecodeerde gegevens gelijk zijn aan gegevens in platte tekst die eerder waren gecodeerd.

3. Eenrichtingsversleuteling

Het vorige voorbeeld is geen ideale manier om authenticatie uit te voeren, dat wil zeggen wanneer we een gebruikerswachtwoord willen opslaan. Idealiter willen we het wachtwoord versleutelen zonder een manier om het te ontsleutelen. Wanneer de gebruiker probeert in te loggen op onze service, versleutelen we zijn wachtwoord en vergelijken we het met het versleutelde wachtwoord dat in de database is opgeslagen. Op die manier hoeven we niet te werken met een wachtwoord in platte tekst.

We kunnen een BasicPasswordEncryptor class om de eenrichtingsversleuteling uit te voeren:

String wachtwoord = "secret-pass"; BasicPasswordEncryptor passwordEncryptor = nieuwe BasicPasswordEncryptor (); String encryptedPassword = wachtwoordEncryptor.encryptPassword (wachtwoord); 

Vervolgens kunnen we een reeds gecodeerd wachtwoord vergelijken met een wachtwoord van een gebruiker die het inlogproces uitvoert zonder dat het wachtwoord hoeft te worden gedecodeerd dat al in de database is opgeslagen:

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

4. Algoritme configureren voor versleuteling

We kunnen een sterker versleutelingsalgoritme gebruiken, maar we moeten niet vergeten om Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files voor onze JVM te installeren (installatie-instructies zijn bij de download inbegrepen).

In Jasypt kunnen we sterke codering gebruiken door een StandardPBEStringEncryptor class en pas het aan met een setAlgorithm () methode:

StandardPBEStringEncryptor encryptor = nieuwe StandardPBEStringEncryptor (); String privateData = "geheime gegevens"; encryptor.setPassword ("some-random-passwprd"); encryptor.setAlgorithm ("PBEWithMD5AndTripleDES");

Laten we het versleutelingsalgoritme instellen op PBEWithMD5AndTripleDES.

Vervolgens ziet het proces van codering en decodering er hetzelfde uit als het vorige met een BasicTextEncryptor klasse:

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

5. Gebruik van multi-threaded decodering

Wanneer we op de multi-core machine werken, willen we de verwerking van de decodering parallel afhandelen. Om een ​​goede prestatie te bereiken kunnen we een PooledPBEStringEncryptor en de setPoolSize () API om een ​​pool van vergisters te maken. Elk van hen kan parallel worden gebruikt door de verschillende draad:

PooledPBEStringEncryptor encryptor = nieuw PooledPBEStringEncryptor (); encryptor.setPoolSize (4); encryptor.setPassword ("enkele-willekeurige-gegevens"); encryptor.setAlgorithm ("PBEWithMD5AndTripleDES");

Het is een goede gewoonte om de poolgrootte in te stellen op het aantal cores van de machine. De code voor codering en decodering is dezelfde als de vorige.

6. Gebruik in andere frameworks

Een snelle laatste opmerking is dat de Jasypt bibliotheek kan worden geïntegreerd met veel andere bibliotheken, waaronder natuurlijk de Voorjaar Kader.

We hoeven alleen een configuratie te maken om coderingsondersteuning toe te voegen aan onze Spring-applicatie. En als we gevoelige gegevens in de database willen opslaan en die we gebruiken Slaapstand als het gegevenstoegangskader kunnen we ook integreren Jasypt ermee.

Instructies over deze integraties, evenals over enkele andere frameworks, zijn te vinden in het Gidsen sectie op de homepage van de Jasypt.

7. Conclusie

In dit artikel keken we naar de Jasypt bibliotheek die ons helpt om veiligere applicaties te maken door gebruik te maken van reeds bekende en geteste cryptografie-algoritmen. Het is bedekt met de eenvoudige API die gemakkelijk te gebruiken is.

De implementatie van al deze voorbeelden en codefragmenten is te vinden in het GitHub-project - dit is een Maven-project, dus het moet gemakkelijk te importeren en uit te voeren zijn zoals het is.