Introduksjon til Jasypt

1. Oversikt

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

Jasypt er et Java-bibliotek som lar utviklere legge til grunnleggende krypteringsfunksjoner til prosjekter med minimal innsats, og uten behov for å ha inngående kunnskap om implementeringsdetaljer for krypteringsprotokoller.

2. Bruke enkel kryptering

Tenk på at vi bygger et webapplikasjon der brukeren sender en privat privat konto. Vi må lagre disse dataene i databasen, men det ville være utrygt å lagre ren tekst.

En måte å håndtere det på er å lagre krypterte data i databasen, og når de henter dataene for en bestemt bruker, dekrypteres de.

For å utføre kryptering og dekryptering ved hjelp av en veldig enkel algoritme, kan vi bruke en BasicTextEncryptor klasse fra Jasypt-biblioteket:

BasicTextEncryptor textEncryptor = ny BasicTextEncryptor (); String privateData = "hemmelige data"; textEncryptor.setPasswordCharArray ("noen tilfeldige data" .toCharArray ());

Da kan vi bruke en kryptere () metode for å kryptere ren tekst:

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

Hvis vi vil lagre private data for gitt bruker i databasen, kan vi lagre en myEncryptedText uten å bryte noen sikkerhetsbegrensninger. Skulle vi ønske å dekryptere data tilbake til ren tekst, kan vi bruke en dekryptere () metode:

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

Vi ser at dekrypterte data er lik ren tekstdata som tidligere var kryptert.

3. Enveiskryptering

Det forrige eksemplet er ikke en ideell måte å utføre autentisering på, det er når vi vil lagre et brukerpassord. Ideelt sett ønsker vi å kryptere passordet uten å dekryptere det. Når brukeren prøver å logge på tjenesten vår, krypterer vi passordet hans og sammenligner det med det krypterte passordet som er lagret i databasen. På den måten trenger vi ikke å bruke passord for ren tekst.

Vi kan bruke en BasicPasswordEncryptor klasse for å utføre enveiskryptering:

Strengpassord = "hemmelig pass"; BasicPasswordEncryptor passwordEncryptor = ny BasicPasswordEncryptor (); String encryptedPassword = passwordEncryptor.encryptPassword (passord); 

Deretter kan vi sammenligne et allerede kryptert passord med et passord til en bruker som utfører påloggingsprosessen uten å måtte dekryptere passordet som allerede er lagret i databasen:

boolsk resultat = passwordEncryptor.checkPassword ("hemmelig pass", kryptert passord); assertTrue (resultat);

4. Konfigurere algoritme for kryptering

Vi kan bruke en sterkere krypteringsalgoritme, men vi må huske å installere Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for vår JVM (installasjonsinstruksjoner er inkludert i nedlastingen).

I Jasypt kan vi bruke sterk kryptering ved å bruke a StandardPBEStringEncryptor klasse og tilpasse den ved hjelp av en settAlgoritme () metode:

StandardPBEStringEncryptor encryptor = ny StandardPBEStringEncryptor (); String privateData = "secret-data"; encryptor.setPassword ("noe tilfeldig passwprd"); encryptor.setAlgorithm ("PBEWithMD5AndTripleDES");

La oss sette krypteringsalgoritmen til å være PBEWithMD5AndTripleDES.

Deretter ser prosessen med kryptering og dekryptering ut som den forrige ved hjelp av a BasicTextEncryptor klasse:

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

5. Bruke dekryptering med flere tråder

Når vi opererer på flerkjernemaskinen, vil vi håndtere prosessering av dekryptering parallelt. For å oppnå en god ytelse kan vi bruke en PooledPBEStringEncryptor og setPoolSize () API for å lage et basseng med fordøyere. Hver av dem kan brukes av den forskjellige tråden parallelt:

PooledPBEStringEncryptor encryptor = ny PooledPBEStringEncryptor (); encryptor.setPoolSize (4); encryptor.setPassword ("noe-tilfeldige data"); encryptor.setAlgorithm ("PBEWithMD5AndTripleDES");

Det er god praksis å stille bassengstørrelsen til å være lik antall kjerner på maskinen. Koden for kryptering og dekryptering er den samme som forrige.

6. Bruk i andre rammer

En rask siste merknad er at Jasypt biblioteket kan integreres med mange andre biblioteker, inkludert selvfølgelig Vår Rammeverk.

Vi trenger bare å lage en konfigurasjon for å legge til krypteringsstøtte i vår-applikasjonen. Og hvis vi vil lagre sensitive data i databasen og vi bruker Dvalemodus som rammeverk for datatilgang, kan vi også integrere Jasypt med det.

Instruksjoner om disse integrasjonene, så vel som med noen andre rammer, finner du i Guider delen på Jasypt-hjemmesiden.

7. Konklusjon

I denne artikkelen så vi på Jasypt bibliotek som hjelper oss med å lage sikrere applikasjoner ved å bruke en allerede kjent og testet kryptografialgoritme. Den er dekket med den enkle API-en som er enkel å bruke.

Implementeringen av alle disse eksemplene og kodebitene finnes i GitHub-prosjektet - dette er et Maven-prosjekt, så det skal være enkelt å importere og kjøre som det er.


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