Úvod do Jasyptu

1. Prehľad

V tomto článku sa pozrieme na Jasypt Knižnica (Java Simplified Encryption).

Jasypt je knižnica Java, ktorá umožňuje vývojárom pridávať k projektom základné možnosti šifrovania s minimálnym úsilím a bez potreby podrobných informácií o podrobnostiach implementácie šifrovacích protokolov.

2. Používanie jednoduchého šifrovania

Zvážte, že vytvárame webovú aplikáciu, v ktorej používateľ zadá súkromné ​​údaje účtu. Tieto údaje musíme uložiť do databázy, ale ukladanie obyčajného textu by bolo neisté.

Jedným zo spôsobov riešenia tejto situácie je uloženie zašifrovaných údajov do databázy a pri načítaní týchto údajov pre konkrétneho používateľa ich dešifrujte.

Na vykonávanie šifrovania a dešifrovania pomocou veľmi jednoduchého algoritmu môžeme použiť a BasicTextEncryptor triedy z knižnice Jasypt:

BasicTextEncryptor textEncryptor = nový BasicTextEncryptor (); Reťazec privateData = "secret-data"; textEncryptor.setPasswordCharArray ("some-random-data" .toCharArray ());

Potom môžeme použiť zašifrovať () metóda šifrovania obyčajného textu:

Reťazec myEncryptedText = textEncryptor.encrypt (privateData); assertNotSame (privateData, myEncryptedText);

Ak chceme uložiť súkromné ​​dáta pre daného používateľa do databázy, môžeme uložiť a myEncryptedText bez porušenia akýchkoľvek bezpečnostných obmedzení. Ak by sme chceli dešifrovať dáta späť na obyčajný text, môžeme použiť a dešifrovať () metóda:

Reťazec plainText = textEncryptor.decrypt (myEncryptedText); assertEquals (plainText, privateData);

Vidíme, že dešifrované údaje sa rovnajú údajom vo formáte obyčajného textu, ktoré boli predtým šifrované.

3. Jednosmerné šifrovanie

Predchádzajúci príklad nie je ideálnym spôsobom vykonávania autentifikácie, to je, keď chceme uložiť heslo používateľa. V ideálnom prípade chceme heslo zašifrovať bez možnosti jeho dešifrovania. Keď sa používateľ pokúsi prihlásiť do našej služby, zašifrujeme jeho heslo a porovnáme ho so šifrovaným heslom, ktoré je uložené v databáze. Takto nemusíme pracovať s obyčajným textovým heslom.

Môžeme použiť a BasicPasswordEncryptor triedy na vykonanie jednosmerného šifrovania:

Reťazcové heslo = "tajný prístup"; BasicPasswordEncryptor passwordEncryptor = nový BasicPasswordEncryptor (); Reťazec encryptedPassword = hesloEncryptor.encryptPassword (heslo); 

Potom môžeme porovnať už zašifrované heslo s heslom používateľa, ktorý vykonáva proces prihlásenia bez nutnosti dešifrovať heslo, ktoré je už uložené v databáze:

boolovský výsledok = hesloEncryptor.checkPassword ("tajné heslo", šifrované heslo); assertTrue (výsledok);

4. Konfigurácia algoritmu na šifrovanie

Môžeme použiť silnejší šifrovací algoritmus, ale nezabudnite si pre naše JVM nainštalovať súbory s neobmedzenou silou jurisdikcie Java Cryptography Extension (JCE) (pokyny na inštaláciu sú obsiahnuté v dokumente na stiahnutie).

V Jasypte môžeme použiť silné šifrovanie pomocou a StandardPBEStringEncryptor triedu a prispôsobiť ju pomocou a setAlgorithm () metóda:

StandardPBEStringEncryptor encryptor = nový StandardPBEStringEncryptor (); Reťazec privateData = "secret-data"; encryptor.setPassword ("some-random-passwprd"); encryptor.setAlgorithm ("PBEWithMD5AndTripleDES");

Nastavíme šifrovací algoritmus tak, aby bol PBEWithMD5AndTripleDES.

Ďalej proces šifrovania a dešifrovania vyzerá rovnako ako predchádzajúci proces pomocou a BasicTextEncryptor trieda:

Reťazec encryptedText = encryptor.encrypt (privateData); assertNotSame (privateData, encryptedText); Reťazec plainText = encryptor.decrypt (encryptedText); assertEquals (plainText, privateData);

5. Používanie viacvláknového dešifrovania

Keď pracujeme na viacjadrovom stroji, chceme spracovať dešifrovanie paralelne. Na dosiahnutie dobrého výkonu môžeme použiť a PooledPBEStringEncryptor a setPoolSize () API na vytvorenie skupiny digestorov. Každý z nich môže paralelne používať rôzne vlákno:

PooledPBEStringEncryptor encryptor = nový PooledPBEStringEncryptor (); encryptor.setPoolSize (4); encryptor.setPassword ("some-random-data"); encryptor.setAlgorithm ("PBEWithMD5AndTripleDES");

Osvedčeným postupom je nastaviť veľkosť bazéna tak, aby sa rovnala počtu jadier stroja. Kód šifrovania a dešifrovania je rovnaký ako predchádzajúce.

6. Použitie v iných rámcoch

Rýchla posledná poznámka je, že Jasypt knižnica môže byť integrovaná s mnohými ďalšími knižnicami, vrátane samozrejme Jar Rámca.

Potrebujeme iba vytvoriť konfiguráciu, aby sme do našej jarnej aplikácie pridali podporu šifrovania. A ak chceme uložiť citlivé dáta do databázy a my to používame Hibernácia ako rámec prístupu k údajom sa môžeme aj integrovať Jasypt s tým.

Pokyny o týchto integráciách, ako aj o niektorých ďalších rámcoch, nájdete v dokumente Sprievodcovia časť na domovskej stránke Jasyptu.

7. Záver

V tomto článku sme sa pozreli na Jasypt knižnica, ktorá nám pomáha vytvárať bezpečnejšie aplikácie pomocou už dobre známych a testovaných kryptografických algoritmov. Je pokryté jednoduchým API, ktoré sa ľahko používa.

Implementáciu všetkých týchto príkladov a útržkov kódu nájdete v projekte GitHub - jedná sa o projekt Maven, takže by malo byť ľahké ho importovať a spustiť tak, ako je.