Introduktion til Jasypt

1. Oversigt

I denne artikel ser vi på Jasypt (Java Simplified Encryption) -bibliotek.

Jasypt er et Java-bibliotek, der giver udviklere mulighed for at tilføje grundlæggende krypteringsfunktioner til projekter med minimal indsats og uden behov for at have en dybdegående viden om implementeringsoplysninger om krypteringsprotokoller.

2. Brug af enkel kryptering

Overvej at vi bygger en webapplikation, hvor brugeren sender en privat konto. Vi har brug for at gemme disse data i databasen, men det ville være usikkert at gemme almindelig tekst.

En måde at håndtere det på er at gemme krypterede data i databasen, og når de henter disse data til en bestemt bruger, dekrypteres det.

For at udføre kryptering og dekryptering ved hjælp af en meget simpel algoritme kan vi bruge en BasicTextEncryptor klasse fra Jasypt-biblioteket:

BasicTextEncryptor textEncryptor = ny BasicTextEncryptor (); String privateData = "hemmelige data"; textEncryptor.setPasswordCharArray ("nogle tilfældige data" .toCharArray ());

Så kan vi bruge en kryptere () metode til at kryptere almindelig tekst:

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

Hvis vi vil gemme private data for en given bruger i databasen, kan vi gemme en myEncryptedText uden at overtræde nogen sikkerhedsrestriktioner. Hvis vi ønsker at dekryptere data tilbage til en almindelig tekst, kan vi bruge en dekryptere () metode:

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

Vi ser, at dekrypterede data er lig med almindelig tekstdata, der tidligere var krypteret.

3. Envejskryptering

Det forrige eksempel er ikke en ideel måde at udføre godkendelse på, det er når vi vil gemme en brugeradgangskode. Ideelt set vil vi kryptere adgangskoden uden en måde at dekryptere den på. Når brugeren forsøger at logge ind på vores tjeneste, krypterer vi hans adgangskode og sammenligner den med den krypterede adgangskode, der er gemt i databasen. På den måde behøver vi ikke at bruge kodeord til almindelig tekst.

Vi kan bruge en BasicPasswordEncryptor klasse til at udføre envejskryptering:

Strengadgangskode = "hemmelig adgang"; BasicPasswordEncryptor passwordEncryptor = ny BasicPasswordEncryptor (); String encryptedPassword = passwordEncryptor.encryptPassword (adgangskode); 

Derefter kan vi sammenligne en allerede krypteret adgangskode med en adgangskode til en bruger, der udfører loginprocessen uden behov for at dekryptere den adgangskode, der allerede er gemt i databasen:

boolsk resultat = passwordEncryptor.checkPassword ("hemmelig adgang", encryptedPassword); assertTrue (resultat);

4. Konfiguration af algoritme til kryptering

Vi kan bruge en stærkere krypteringsalgoritme, men vi skal huske at installere Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files til vores JVM (installationsinstruktioner er inkluderet i downloadet).

I Jasypt kan vi bruge stærk kryptering ved hjælp af en StandardPBEStringEncryptor klasse og tilpasse den ved hjælp af en sætAlgoritme () metode:

StandardPBEStringEncryptor encryptor = ny StandardPBEStringEncryptor (); String privateData = "hemmelige data"; encryptor.setPassword ("noget tilfældigt-passwprd"); encryptor.setAlgorithm ("PBEWithMD5AndTripleDES");

Lad os indstille krypteringsalgoritmen til at være PBEMedMD5AndTripleDES.

Derefter ser processen med kryptering og dekryptering den samme ud som den forrige ved hjælp af en BasicTextEncryptor klasse:

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

5. Brug af flertrådet dekryptering

Når vi arbejder på multikerne-maskinen, vil vi håndtere behandling af dekryptering parallelt. For at opnå en god præstation kan vi bruge en PooledPBEStringEncryptor og setPoolSize () API til at oprette en pulje af fordøjere. Hver af dem kan bruges af den forskellige tråd parallelt:

PooledPBEStringEncryptor encryptor = ny PooledPBEStringEncryptor (); encryptor.setPoolSize (4); encryptor.setPassword ("nogle tilfældige data"); encryptor.setAlgorithm ("PBEWithMD5AndTripleDES");

Det er god praksis at indstille poolstørrelsen til at være lig med antallet af kerner på maskinen. Koden til kryptering og dekryptering er den samme som tidligere.

6. Anvendelse i andre rammer

En hurtig sidste bemærkning er, at Jasypt biblioteket kan integreres med mange andre biblioteker, herunder selvfølgelig Forår Ramme.

Vi behøver kun at oprette en konfiguration for at tilføje krypteringsstøtte til vores Spring-applikation. Og hvis vi vil gemme følsomme data i databasen, og vi bruger Dvale som dataadgangsrammen kan vi også integrere Jasypt med det.

Instruktioner om disse integrationer såvel som med nogle andre rammer kan findes i Vejledninger sektion på Jasyptens startside.

7. Konklusion

I denne artikel så vi på Jasypt bibliotek, der hjælper os med at skabe mere sikre applikationer ved hjælp af en allerede velkendt og testet kryptografi-algoritme. Det er dækket af den enkle API, der er nem at bruge.

Implementeringen af ​​alle disse eksempler og kodestykker findes i GitHub-projektet - dette er et Maven-projekt, så det skal være let at importere og køre, som det er.


$config[zx-auto] not found$config[zx-overlay] not found