Un esempio di crittografia di un file XML in Java utilizzando castello gonfiabile
-
20-09-2019 - |
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!
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