Wie finden Sie heraus, was Algorithmus [Verschlüsselung] durch meine JVM unterstützt?
-
02-10-2019 - |
Frage
Ich verwende Jasypt für die Verschlüsselung. Dies ist mein Code:
public class Encryptor {
private final static StandardPBEStringEncryptor pbeEncryptor = new StandardPBEStringEncryptor();
private final static String PASSWORD = "FBL";
private final static String ALGORITHM = "PBEWithMD5AndTripleDES";
static{
pbeEncryptor.setPassword( PASSWORD );
//pbeEncryptor.setAlgorithm( ALGORITHM );
}
public static String getEncryptedValue( String text ){
return pbeEncryptor.encrypt( text );
}
public static String getDecryptedValue( String text ){
return pbeEncryptor.decrypt( text );
}
}
Kommentar- die setAlgorithm
Linie und es wird eine Ausnahme
org.jasypt.exceptions.EncryptionOperationNotPossibleException : Verschlüsselung hob eine excep tion. EIN mögliche Ursache ist, den Sie verwenden starke Verschlüsselungsalgorithmen und Sie haben nicht die Java Cryptography Ex installiert Spannung (JCE) Unbegrenzte Strength Jurisdiction Policy Files in diesem Java Virtual Machine
api sagt:
Legt den Algorithmus für die zu verwendende Verschlüsselung Legt den Algorithmus zu sein zur Verschlüsselung verwendet, wie PBEWithMD5AndDES.
hat Dieser Algorithmus unterstützt werden durch (Ihr JCE Provider, wenn Sie eine angeben, oder der Standard-JVM-Anbieter, wenn Sie nicht), und wenn es unterstützt wird, Sie angeben kann auch Modus und Polsterung für es, wie ALGORITHM / MODE / padding.
Wenn Sie jetzt einen Kommentar ‚setAlgorithm‘ wird die Standard-Algorithmus verwenden [Ich denke, es ist md5], und es wird gut funktionieren. Das bedeutet, dass Md5 durch meine JVM unterstützt wird. Nun, wie um herauszufinden, was andere Verschlüsselungsalgorithmen durch meine JVM unterstützt werden.
Danke,
Lösung
Im Folgenden werden alle Anbieter auflisten und den Algorithmen Fan. Welche Version von Java verwenden Sie? Es sei denn, Sie auf einer alten Version sind JCE sollte standardmäßig enthalten sein.
import java.security.Provider;
import java.security.Security;
public class SecurityListings {
public static void main(String[] args) {
for (Provider provider : Security.getProviders()) {
System.out.println("Provider: " + provider.getName());
for (Provider.Service service : provider.getServices()) {
System.out.println(" Algorithm: " + service.getAlgorithm());
}
}
}
}
Edit: Gibt es Gründe, warum Sie nicht die Standard-Sachen aus dem javax.crypto Paket verwenden?
Generieren 1) ein Key
mit
Key key = SecretKeyFactory.getInstance(algorithm).generateSecret(new PBEKeySpec(password.toCharArray()));
Erstellen 2) ein Cipher
mit
cipher = Cipher.getInstance(algorithm);
3) Init Ihrer Chiffre mit der Taste
cipher.init(Cipher.ENCRYPT_MODE, key);
4) Hat die Verschlüsselung mit
byte[] encrypted = cipher.doFinal(data)
Andere Tipps
Das Werkzeug Jasypt Befehlszeile kommt nun mit einem Skript, dies zu tun genannt listAlgorithms.bat
für Fenster und listAlgorithms.sh
für Linux.
Hier finden Sie Anleitungen, wie man es herunterladen und verwenden hier: http: //www.jasypt .org / cli.html # Listing_algorithms
Wenn Sie es noch nicht installiert haben, dann müssen Sie die JCE (Java Cryptography Extension), die Unterstützung für die Algorithmen bietet installieren.
Sie können sehen, wie hier zu installieren:
Die Bibliothek finden Sie hier: http://www.oracle.com/technetwork/ java / JavaSE / tech / Index-jsp-136007.html
Ich habe versucht, den von @Qwerky geschrieben Code, aber es ist nicht sehr hilfreich. Ich hatte den neuesten BouncyCastle Anbieter hinzugefügt und die Ergebnisse, die ich erhielt, waren sehr verwirrend. Dies zeigt sich in besseren Detail, die der Anbieter, Version ist, und der Algorithmus Typ und Namen.
for (Provider provider : Security.getProviders()) {
System.out.println("Provider: " + provider.getName() + " version: " + provider.getVersion());
for (Provider.Service service : provider.getServices()) {
System.out.printf(" Type : %-30s Algorithm: %-30s\n", service.getType(), service.getAlgorithm());
}
}
Es ist immer noch eine ‚anhängig‘ Frage nach Qwerky gefragt: warum mit Jasypt statt javax.crypto des mit
Nun, ich würde mit Jasypt empfehlen, da es eine einfache Möglichkeit, um Krypto für Anfänger als auch für erfahrenen Anwender in hohem Maße konfigurierbar.
Mit Jasypt können Sie unter Nutzen von javax.crypto mit einem wenig Wissen von JCE und der Kryptographie schnell starten. Egal, ob Sie Benutzer-Passwörter oder Verschlüsselung / Entschlüsselung von Daten verwalten wollen, bietet das Framework eine einfache Abstraktion auf die Frage.
In der gleichen Zeit, der Rahmen alle macht die Möglichkeiten der JCE Spezifikation erfahrene Benutzer zu ermöglichen, die volle Kontrolle zu sein.
Zusätzlich dazu bietet Jasypt viele weitere Funktionen out-of-the-box für bekannte Fragen (mit sensiblen Daten in der Datenbank gespeichert zu tun, ...)