2010-09-10 8 views
29

Ich benutze Jasypt für die Verschlüsselung. Dies ist mein Code:Wie finde ich heraus, welcher Algorithmus [Verschlüsselung] von meiner JVM unterstützt wird?

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- der setAlgorithm Linie und es wird eine Ausnahme

org.jasypt.exceptions.EncryptionOperationNotPossibleException werfen: Encryption hob eine excep tion. Eine mögliche Ursache ist das Sie verwenden starke Verschlüsselungsalgorithmen und Sie haben nicht die Java Cryptography Ex Spannung (JCE) Unlimited Strength Jurisdiction Policy Files in diesem Java Virtual Machine

api sagt installiert:

Setzt der Algorithmus verwendet werden, für Verschlüsselung Legt den Algorithmus verwendet für die Verschlüsselung werden, wie PBEWithMD5AndDES.

hat Dieser Algorithmus von Ihr JCE Provider unterstützt werden (falls Sie eine angeben, oder die Standard-JVM-Anbieter, wenn Sie dies nicht tun ) und, falls sie unterstützt wird, Sie auch für Mode und Polsterung angeben es, wie ALGORITHMUS/MODE/PADDING.

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

Wenn Sie nun ‚setAlgorithm‘ Kommentar wird es den Standardalgorithmus verwenden [Ich denke, es ist md5], und es wird gut funktionieren. Das heißt, MD5 wird von meiner JVM unterstützt. Wie finde ich heraus, welche anderen Verschlüsselungsalgorithmen von meiner JVM unterstützt werden?

Danke,

Antwort

36

Nachstehend alle Anbieter auflistet und die Algorithmen Fan. Welche Version von Java verwenden Sie? Sofern Sie nicht auf einer alten Version sind, sollte JCE 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 Sie?

1) Erstellen Sie ein Key mit

Key key = SecretKeyFactory.getInstance(algorithm).generateSecret(new PBEKeySpec(password.toCharArray())); 

2) a Erstellen Cipher mit

cipher = Cipher.getInstance(algorithm); 

3) Init Ihre Chiffre mit dem Schlüssel

cipher.init(Cipher.ENCRYPT_MODE, key); 

4) Haben die Verschlüsselungs- mit

byte[] encrypted = cipher.doFinal(data) 
+0

ich bin mit JDK 1.6 –

+4

Statt: System.out.println ("Algorithmus:" + service.getAlgorithm()); benutze System.out.println ("" + service); und Sie können die verfügbaren Verschlüsselungsstufen sehen. Im Folgenden wird beispielsweise angegeben, dass 128-Bit-AES-Verschlüsselung unterstützt wird, aber nicht 256-Bit-AES: SunJCE: Cipher.AES -> com.sun.crypto.provider.AESCipher ... UnterstützteModi = ECB | CBC | PCBC | CTR | CTS | CFB | OFB | CFB8 | CFB16 | CFB24 | CFB32 | CFB40 | CFB48 | CFB56 | CFB64 | OFB8 | OFB16 | OFB24 | OFB32 | OFB40 | OFB48 | OFB56 | OFB64 | CFB72 | CFB80 | CFB88 | CFB96 | CFB104 | CFB112 | CFB120 | CFB128 | OFB72 | OFB80 | OFB88 | OFB96 | OFB104 | OFB112 | OFB120 | OFB128} –

+0

Der Code listet viele Algorithmen auf, die nicht verwendet werden können. Nicht so hilfreicher Code. – Jonas

1

Es gibt immer noch eine "ausstehende" Frage von Qwerky: Warum mit Jasypt anstelle von javax.crypto?

Nun, ich würde empfehlen, Jasypt zu verwenden, da es eine einfache Möglichkeit ist, für Anfänger krypto und für erfahrene Benutzer in hohem Grade konfigurierbar zu sein.

Mit Jasypt können Sie mit ein wenig Wissen über JCE und die Kryptographie schnell von javax.crypto profitieren. Ob Sie Benutzerkennwörter verwalten oder Daten verschlüsseln/entschlüsseln möchten, das Framework bietet eine einfache Abstraktion für die Frage.

Gleichzeitig deckt das Framework alle Möglichkeiten der JCE-Spezifikation auf, damit erfahrene Benutzer die volle Kontrolle behalten können.

Zusätzlich dazu bietet Jasypt viele weiteren Funktionen out-of-the-box für bekannte Fragen (mit sensiblen Daten in der Datenbank gespeichert zu tun, ...)

+0

Wenn er eine Frage stellen möchte, sollte er es nicht in eine Antwort schreiben. Dies ist kein Diskussionsfaden – Mick

4

Das Jasypt Kommandozeilen-Tool jetzt kommt mit einem Skript dafür, genannt listAlgorithms.bat für Windows und listAlgorithms.sh für Linux.

können Sie finden Anweisungen, wie es hier herunterladen und verwenden: http://www.jasypt.org/cli.html#Listing_algorithms

2

ich den Code von @Qwerky geschrieben versucht, aber es ist nicht sehr hilfreich. Ich hatte den neuesten BouncyCastle-Anbieter hinzugefügt, und die Ergebnisse, die ich bekam, waren sehr verwirrend. Dies zeigt im Detail, wer der Anbieter, die Version und der Algorithmustyp und -name ist.

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()); 
    } 
} 
Verwandte Themen