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

werfen

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.

siehe: http://www.jasypt.org/api/jasypt/apidocs/org/jasypt/encryption/pbe/StandardPBEStringEncryptor.html#setAlgorithm%28java.lang.String%29

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,

War es hilfreich?

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:

http://download.oracle .com / JavaSE / 1.4.2 / docs / guide / security / CryptoSpec.html # ProviderInstalling

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, ...)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top