Domanda

Sto usando Jasypt per la crittografia. Questo è il mio codice:

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 );
    }

}

Rimuovere il commento dalla linea di setAlgorithm e sarà un'eccezione

  

org.jasypt.exceptions.EncryptionOperationNotPossibleException :   Crittografia sollevò uno zione ecce. UN   possibile causa è che si sta utilizzando forte   gli algoritmi di crittografia e non è stato   installato il Java Cryptography Ex   tensione Forza (JCE) illimitato   Giurisdizione I file politica in questo Java   Virtual Machine

api dice:

  

Imposta l'algoritmo da utilizzare per la   crittografia Imposta l'algoritmo di essere   utilizzata per la crittografia, come   PBEWithMD5AndDES.

     

Questo algoritmo deve essere supportato da   il vostro fornitore di JCE (se si specifica uno,   o il provider JVM predefinito se si   non) e, se è supportato, è   può anche modalità e imbottitura specificare per   esso, come ALGORITMO / MODE / imbottitura.

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

Ora, quando si commento 'setAlgorithm' verrà utilizzato il valore predefinito Algorithm [Credo che sia MD5], e funzionerà bene. Ciò significa che MD5 sono supportati dalla mia JVM. Ora, come scoprire quali altri algoritmi di crittografia sono supportate dalla mia JVM.

Grazie,

È stato utile?

Soluzione

Segue un elenco di tutti i fornitori e il sostenitore algoritmi. Quale versione di Java stai usando? A meno che non siete su una vecchia versione JCE dovrebbe essere incluso come standard.

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

    }
}

Modifica: Qual è il motivo per cui non si usa la roba standard dal pacchetto javax.crypto?

1) Generare un Key utilizzando

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

2) Creazione di un Cipher utilizzando

cipher = Cipher.getInstance(algorithm);  

3) Init vostra cifra con il tasto

cipher.init(Cipher.ENCRYPT_MODE, key);  

4) Eseguire la crittografia con

byte[] encrypted = cipher.doFinal(data)

Altri suggerimenti

Lo strumento da riga di comando Jasypt è ora dotato di uno script per fare questo chiamato listAlgorithms.bat per le finestre e listAlgorithms.sh per Linux.

È possibile trovare le istruzioni su come scaricare e utilizzare qui: http: //www.jasypt .org / cli.html # Listing_algorithms

Se non lo avete già installato, quindi è necessario installare il JCE (Java Cryptography Extension), che fornisce il supporto per gli algoritmi.

Si può vedere come installare qui:

http://download.oracle .com / JavaSE / 1.4.2 / docs / guida / sicurezza / CryptoSpec.html # ProviderInstalling

La libreria può essere trovato qui: http://www.oracle.com/technetwork/ java / JavaSE / tecnologia / index-jsp-136007.html

Ho provato il codice inviato da @Qwerky, ma non è molto utile. Avevo aggiunto l'ultimo fornitore BouncyCastle, ed i risultati che ho ottenuto è stato molto confuso. Questa mostra in maggior dettaglio chi è il fornitore, la versione e il tipo di algoritmo e nome.

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

C'è ancora una domanda 'in attesa' chiesto da Qwerky: perché utilizzando Jasypt invece di usare javax.crypto

Bene, mi consiglia di utilizzare Jasypt in quanto è un modo semplice per crypto per i principianti e altamente configurabile per utenti esperti.

Con Jasypt, è possibile iniziare a prendere vantaggio di javax.crypto rapidamente con un po 'di conoscenza della JCE e la crittografia. Se si desidera gestire le password degli utenti o dati Decrypt / cifrare, il framework fornisce una semplice astrazione alla domanda.

Nello stesso tempo, il quadro espone tutte le possibilità della specifica JCE per consentire agli utenti esperti di essere in pieno controllo.

In aggiunta a questo, Jasypt fornisce molte altre caratteristiche out-of-the-box per le domande ben noti (si tratta di dati sensibili memorizzati nel database, ...)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top