Domanda

Qualcuno mi può mostrare (o fornire un collegamento a) un esempio di come crittografare un file in Java utilizzando castello gonfiabile? Ho guardato oltre bouncycastle.org ma non riesco a trovare alcuna documentazione della loro API. Anche solo sapere quali classi da utilizzare sarebbe di grande aiuto per me per iniziare!

È stato utile?

Soluzione

Che tipo di crittografia si desidera eseguire? Basata su password (PBE), simmetrica, asimmetrica? E 'tutto nel modo in cui si configura il Cipher .

Non si dovrebbe avere di utilizzare tutte le API specifiche BouncyCastle, solo gli algoritmi che fornisce. Ecco un esempio che utilizza il cifrario BouncyCastle PBE per cifrare una stringa:

import java.security.SecureRandom;
import java.security.Security;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class PBE {

    private static final String salt = "A long, but constant phrase that will be used each time as the salt.";
    private static final int iterations = 2000;
    private static final int keyLength = 256;
    private static final SecureRandom random = new SecureRandom();

    public static void main(String [] args) throws Exception {
        Security.insertProviderAt(new BouncyCastleProvider(), 1);

        String passphrase = "The quick brown fox jumped over the lazy brown dog";
        String plaintext = "hello world";
        byte [] ciphertext = encrypt(passphrase, plaintext);
        String recoveredPlaintext = decrypt(passphrase, ciphertext);

        System.out.println(recoveredPlaintext);
    }

    private static byte [] encrypt(String passphrase, String plaintext) throws Exception {
        SecretKey key = generateKey(passphrase);

        Cipher cipher = Cipher.getInstance("AES/CTR/NOPADDING");
        cipher.init(Cipher.ENCRYPT_MODE, key, generateIV(cipher), random);
        return cipher.doFinal(plaintext.getBytes());
    }

    private static String decrypt(String passphrase, byte [] ciphertext) throws Exception {
        SecretKey key = generateKey(passphrase);

        Cipher cipher = Cipher.getInstance("AES/CTR/NOPADDING");
        cipher.init(Cipher.DECRYPT_MODE, key, generateIV(cipher), random);
        return new String(cipher.doFinal(ciphertext));
    }

    private static SecretKey generateKey(String passphrase) throws Exception {
        PBEKeySpec keySpec = new PBEKeySpec(passphrase.toCharArray(), salt.getBytes(), iterations, keyLength);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWITHSHA256AND256BITAES-CBC-BC");
        return keyFactory.generateSecret(keySpec);
    }

    private static IvParameterSpec generateIV(Cipher cipher) throws Exception {
        byte [] ivBytes = new byte[cipher.getBlockSize()];
        random.nextBytes(ivBytes);
        return new IvParameterSpec(ivBytes);
    }

}

Altri suggerimenti

È possibile visualizzare il documento java a http://bouncycastle.org/docs/ docs1.6 / index.html

È possibile scaricare esempi da questa pagina: http: / /eu.wiley.com/WileyCDA/WileyTitle/productCd-0764596330,descCd-DOWNLOAD.html

Se non si dispone di un motivo particolare per l'utilizzo di BountyCastle, è possibile trovare un buon tutorial e lo sfondo informazioni sul Java supporto della crittografia integrata con diversi esempi di codice qui .

Il posto migliore per trovare castello gonfiabile esempi di codice Java è quello di passare attraverso i casi di test nella suite di test di castello gonfiabile Bouncy Castle ultima versione java

Questi test suite contengono codice non obsoleto che può essere usato facilmente

Mentre è una risposta indiretta alla tua domanda, forse lo troverete utile usare jasypt per gestire la crittografia.

Ecco un esempio di come crittografare un file utilizzando jasypt: http://www.jasypt.org/encrypting-configuration.html

E, ecco come configurare castello gonfiabile come un provider per jasypt: http://www.jasypt.org/bouncy-castle.html

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