Bevezetés a Jasyptbe

1. Áttekintés

Ebben a cikkben megnézzük a Jasypt (Java Simplified Encryption) könyvtár.

A Jasypt egy Java könyvtár, amely lehetővé teszi a fejlesztők számára, hogy minimális erőfeszítéssel hozzáadják az alapvető titkosítási képességeket a projektekhez, anélkül, hogy alapos ismeretekkel kellene rendelkezniük a titkosítási protokollok megvalósításának részleteiről.

2. Egyszerű titkosítás használata

Fontolja meg, hogy építünk egy webalkalmazást, amelyben a felhasználó egy fiók privát adatait adja meg. Tárolnunk kell ezeket az adatokat az adatbázisban, de az egyszerű szöveg tárolása nem biztonságos.

A kezelés egyik módja az, ha titkosított adatokat tárol az adatbázisban, és amikor az adatokat egy adott felhasználónak visszakeresi, visszafejteni.

A titkosítás és a visszafejtés végrehajtásához egy nagyon egyszerű algoritmus segítségével használhatjuk a BasicTextEncryptor osztály a Jasypt könyvtárból:

BasicTextEncryptor textEncryptor = új BasicTextEncryptor (); String privateData = "titkos adat"; textEncryptor.setPasswordCharArray ("some-random-data" .toCharArray ());

Akkor használhatunk egy titkosítás () módszer az egyszerű szöveg titkosításához:

Karakterlánc myEncryptedText = textEncryptor.encrypt (privateData); assertNotSame (privateData, myEncryptedText);

Ha az adott felhasználó számára privát adatokat akarunk tárolni az adatbázisban, akkor a myEncryptedText biztonsági korlátozások megsértése nélkül. Ha vissza akarjuk visszafejteni az adatokat sima szöveggé, használhatjuk a visszafejteni () módszer:

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

Látjuk, hogy a visszafejtett adatok megegyeznek a korábban titkosított egyszerű szöveges adatokkal.

3. Egyirányú titkosítás

Az előző példa nem ideális módszer a hitelesítés végrehajtására, vagyis amikor felhasználói jelszót akarunk tárolni. Ideális esetben a jelszót titkosítás nélkül szeretnénk visszafejteni. Amikor a felhasználó megpróbál bejelentkezni a szolgáltatásunkba, akkor titkosítjuk a jelszavát, és összehasonlítjuk az adatbázisban tárolt titkosított jelszóval. Így nem kell egyszerű szöveges jelszóval működnünk.

Használhatjuk a BasicPasswordEncryptor osztály az egyirányú titkosítás végrehajtására:

Karakterlánc jelszó = "titkos átadás"; BasicPasswordEncryptor passwordEncryptor = új BasicPasswordEncryptor (); String encryptedPassword = passwordEncryptor.encryptPassword (jelszó); 

Ezután összehasonlíthatunk egy már titkosított jelszót annak a felhasználónak a jelszavával, amely a bejelentkezési folyamatot úgy hajtja végre, hogy nem kell visszafejteni az adatbázisban már tárolt jelszót:

logikai eredmény = passwordEncryptor.checkPassword ("titkos átadás", encryptedPassword); assertTrue (eredmény);

4. Algoritmus beállítása titkosításhoz

Használhatunk erősebb titkosítási algoritmust, de ne felejtsük el telepíteni a Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File fájlokat a JVM-hez (a telepítési utasításokat a letöltés tartalmazza).

A Jasypt-ben erős titkosítást használhatunk az a használatával StandardPBEStringEncryptor osztály és testre szabhatja az a használatával setAlgorithm () módszer:

StandardPBEStringEncryptor encryptor = új StandardPBEStringEncryptor (); String privateData = "titkos adat"; encryptor.setPassword ("some-random-passwprd"); encryptor.setAlgorithm ("PBEWithMD5AndTripleDES");

Állítsuk a titkosítási algoritmust PBEWithMD5AndTripleDES.

Ezután a titkosítás és a visszafejtés folyamata ugyanúgy néz ki, mint az előző a használatával BasicTextEncryptor osztály:

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

5. Többszálú visszafejtés használata

Amikor a többmagos gépen működünk, párhuzamosan akarjuk kezelni a visszafejtés feldolgozását is. A jó teljesítmény eléréséhez használhatjuk a PooledPBEStringEncryptor és a setPoolSize () API emésztőkészlet létrehozásához. Mindegyiket a különböző szál párhuzamosan használhatja:

PooledPBEStringEncryptor encryptor = új PooledPBEStringEncryptor (); encryptor.setPoolSize (4); encryptor.setPassword ("néhány véletlenszerű adat"); encryptor.setAlgorithm ("PBEWithMD5AndTripleDES");

Jó gyakorlat, ha a medence méretét megegyezik a gép magjainak számával. A titkosítás és a visszafejtés kódja megegyezik az előzőekkel.

6. Használat más keretrendszerekben

Gyors záró megjegyzés, hogy a Jasypt könyvtár integrálható sok más könyvtárral, beleértve természetesen a Tavaszi Keretrendszer.

Csak egy konfigurációt kell létrehoznunk, hogy a titkosítási támogatást hozzáadjuk a Spring alkalmazáshoz. És ha érzékeny adatokat akarunk tárolni az adatbázisban, és használjuk Hibernálás mint az adatelérési keretrendszert integrálhatjuk is Jasypt ezzel.

Az ezekre az integrációkra, valamint néhány más keretrendszerre vonatkozó utasítások megtalálhatók a Útmutatók szakasz a Jasypt honlapján.

7. Következtetés

Ebben a cikkben a Jasypt könyvtár, amely egy már jól ismert és bevált kriptográfiai algoritmusok használatával segít biztonságosabb alkalmazások létrehozásában. Az egyszerű, könnyen használható API-val van lefedve.

Ezeknek a példáknak és kódrészleteknek a megvalósítása megtalálható a GitHub projektben - ez egy Maven projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.