Einführung in Jasypt

1. Übersicht

In diesem Artikel befassen wir uns mit der Jasypt- Bibliothek (Java Simplified Encryption).

Jasypt ist eine Java-Bibliothek, mit der Entwickler Projekten mit minimalem Aufwand und ohne gründliche Kenntnisse über Implementierungsdetails von Verschlüsselungsprotokollen grundlegende Verschlüsselungsfunktionen hinzufügen können.

2. Verwenden der einfachen Verschlüsselung

Stellen Sie sich vor, wir erstellen eine Webanwendung, in der der Benutzer private Daten eines Kontos übermittelt. Wir müssen diese Daten in der Datenbank speichern, aber es wäre unsicher, einfachen Text zu speichern.

Eine Möglichkeit, damit umzugehen, besteht darin, verschlüsselte Daten in der Datenbank zu speichern und beim Abrufen dieser Daten für einen bestimmten Benutzer zu entschlüsseln.

Um die Ver- und Entschlüsselung mit einem sehr einfachen Algorithmus durchzuführen, können wir eine BasicTextEncryptor- Klasse aus der Jasypt-Bibliothek verwenden:

BasicTextEncryptor textEncryptor = new BasicTextEncryptor(); String privateData = "secret-data"; textEncryptor.setPasswordCharArray("some-random-data".toCharArray());

Dann können wir eine encrypt () -Methode verwenden, um den Klartext zu verschlüsseln:

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

Wenn wir private Daten für einen bestimmten Benutzer in der Datenbank speichern möchten , können wir einen myEncryptedText speichern, ohne die Sicherheitsbeschränkungen zu verletzen. Wenn wir Daten wieder in einen einfachen Text entschlüsseln möchten, können wir eine decrypt () -Methode verwenden:

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

Wir sehen, dass entschlüsselte Daten gleich Klartextdaten sind, die zuvor verschlüsselt wurden.

3. Einwegverschlüsselung

Das vorherige Beispiel ist kein idealer Weg, um eine Authentifizierung durchzuführen. In diesem Fall möchten wir ein Benutzerkennwort speichern. Im Idealfall möchten wir das Passwort verschlüsseln, ohne es entschlüsseln zu können. Wenn der Benutzer versucht, sich bei unserem Dienst anzumelden, verschlüsseln wir sein Passwort und vergleichen es mit dem verschlüsselten Passwort, das in der Datenbank gespeichert ist. Auf diese Weise müssen wir kein Klartext-Passwort bearbeiten.

Wir können eine BasicPasswordEncryptor- Klasse verwenden, um die Einwegverschlüsselung durchzuführen:

String password = "secret-pass"; BasicPasswordEncryptor passwordEncryptor = new BasicPasswordEncryptor(); String encryptedPassword = passwordEncryptor.encryptPassword(password); 

Anschließend können wir ein bereits verschlüsseltes Kennwort mit einem Kennwort eines Benutzers vergleichen, der einen Anmeldevorgang ausführt, ohne das bereits in der Datenbank gespeicherte Kennwort entschlüsseln zu müssen:

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

4. Konfigurieren des Algorithmus für die Verschlüsselung

Wir können einen stärkeren Verschlüsselungsalgorithmus verwenden, müssen jedoch daran denken, JCE-Richtliniendateien (Java Cryptography Extension) für unsere JVM zu installieren (Installationsanweisungen sind im Download enthalten).

In Jasypt können wir mithilfe einer StandardPBEStringEncryptor- Klasse eine starke Verschlüsselung verwenden und diese mithilfe einer setAlgorithm () -Methode anpassen :

StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); String privateData = "secret-data"; encryptor.setPassword("some-random-passwprd"); encryptor.setAlgorithm("PBEWithMD5AndTripleDES");

Stellen wir den Verschlüsselungsalgorithmus auf PBEWithMD5AndTripleDES ein.

Als nächstes sieht der Prozess der Ver- und Entschlüsselung genauso aus wie der vorherige mit einer BasicTextEncryptor- Klasse:

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

5. Verwenden der Multi-Threaded-Entschlüsselung

Wenn wir auf dem Multi-Core-Computer arbeiten, möchten wir die Verarbeitung der Entschlüsselung parallel abwickeln. Um eine gute Leistung zu erzielen, können wir einen PooledPBEStringEncryptor und die setPoolSize () -API verwenden , um einen Pool von Digestern zu erstellen. Jeder von ihnen kann von den verschiedenen Threads parallel verwendet werden:

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

Es wird empfohlen, die Poolgröße so einzustellen, dass sie der Anzahl der Kerne der Maschine entspricht. Der Code für die Ver- und Entschlüsselung ist der gleiche wie bei den vorherigen.

6. Verwendung in anderen Frameworks

Eine kurze abschließende Anmerkung ist, dass die Jasypt- Bibliothek in viele andere Bibliotheken integriert werden kann, einschließlich natürlich des Spring Framework.

Wir müssen nur eine Konfiguration erstellen, um unserer Spring-Anwendung Verschlüsselungsunterstützung hinzuzufügen. Wenn wir vertrauliche Daten in der Datenbank speichern möchten und Hibernate als Datenzugriffsframework verwenden, können wir auch Jasypt in diese integrieren.

Anweisungen über diese Integrationen, sowie mit einigen anderen Frameworks, in der gefunden werden Guides Abschnitt auf der Homepage der Jasypt.

7. Fazit

In diesem Artikel haben wir uns die Jasypt- Bibliothek angesehen, mit deren Hilfe wir sicherere Anwendungen erstellen können, indem wir bereits bekannte und getestete Kryptografiealgorithmen verwenden. Es wird mit der einfachen API abgedeckt, die einfach zu verwenden ist.

Die Implementierung all dieser Beispiele und Codefragmente finden Sie im GitHub-Projekt - dies ist ein Maven-Projekt, daher sollte es einfach zu importieren und auszuführen sein, wie es ist.