¿Alguien me puede mostrar (o proporcionar un enlace) un ejemplo de cómo cifrar un archivo en Java usando un castillo hinchable? Revisé bouncycastle.org pero no puedo encontrar ninguna documentación de su API. ¡Incluso el simple hecho de saber qué clases usar sería una gran ayuda para comenzar!Un ejemplo de encriptación de un archivo xml en Java usando castillo hinchable
Respuesta
¿Qué tipo de cifrado desea realizar? Basado en contraseña (PBE), simétrico, asimétrico? Es todo en cómo configurar el Cipher.
No debería tener que usar ninguna API específica de BouncyCastle, solo los algoritmos que proporciona. Aquí hay un ejemplo que utiliza el cifrado BouncyCastle PBE para cifrar una cadena:
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);
}
}
La sal no debe ser constante. –
Si obtiene java.security.InvalidKeyException: Tamaño de clave ilegal ref: http://stackoverflow.com/a/6481658/234110 –
Si bien es una respuesta indirecta a su pregunta, tal vez lo encontrará útil el uso de Jasypt para manejar la encriptación.
He aquí un ejemplo de cómo cifrar un archivo usando Jasypt: http://www.jasypt.org/encrypting-configuration.html
Y, aquí está cómo configurar castillo hinchable como proveedor de Jasypt: http://www.jasypt.org/bouncy-castle.html
Una segunda biblioteca de terceros para abstraer la primera probablemente biblioteca de terceros no requerida? Suena como una muy buena idea. – jarnbjo
Estamos usando jasypt y BouncyCastle. Jasypt maneja el cifrado y descifrado transparente de las columnas de la base de datos con Hibernate, y BouncyCastle realiza el cifrado y el descifrado reales. – Omniwombat
Usted puede ver el doc java en http://bouncycastle.org/docs/docs1.6/index.html
puede descargar ejemplos de esta página: http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0764596330,descCd-DOWNLOAD.html
Por favor, agregue algunos detalles aquí. Solo refiriéndose a algún enlace puede romperse en el futuro. –
Si no lo hace tiene alguna razón en particular para usar BountyCastle, puede encontrar un buen tutorial e información de fondo sobre el soporte criptográfico incorporado de Java con varios ejemplos de código here.
Vale la pena señalar que BouncyCastle es solo un "proveedor" que funciona dentro del marco de criptografía integrado (JCE). Se usa con frecuencia porque contiene un conjunto de primitivas más completo que el proveedor predeterminado. – caf
BouncyCastle no es "solo un proveedor". También puede usar la funcionalidad de criptografía de BouncyCastle a través de su API propietaria. Tiene razón en que BouncyCastle proporciona algoritmos criptográficos adicionales, pero rara vez he visto una necesidad real de estos. Sin embargo, más de una vez, BouncyCastle se usa para la funcionalidad ya provista por los proveedores de seguridad incorporados estándar de API y VM. – jarnbjo
El mejor lugar para encontrar castillo hinchable ejemplos de código Java es ir a través de los casos de prueba en el banco de pruebas del castillo hinchable Bouncy Castle latest release java
estos bancos de pruebas contienen código no desaprobado que se puede utilizar fácilmente
- 1. C# Ejemplo de encriptación AES256 usando System.Security.Cryptography.Aes
- 2. Un ejemplo de procesamiento xml pero usando anti-xml en lugar de Scala xml
- 3. Escribir en un archivo XML en Java
- 4. Extraer un elemento XML desde un archivo XML usando XPath
- 5. Escribir un archivo XML (usando XStream) en un sistema de archivos en Java
- 6. eliminar la cabecera XML desde un archivo XML en Java
- 7. Encriptación efectiva de archivos usando AES en java
- 8. Creando un archivo XML simple usando python
- 9. C# Cifrar un archivo XML
- 10. ¿Cómo leer un archivo XML con Java?
- 11. Ordenando un XML en Java
- 12. Incluyendo un archivo XML en un archivo XML/XSL
- 13. ¿Cómo validar un archivo XML usando Java con un XSD que tenga un include?
- 14. Cómo quitar la BOM de un archivo XML en Java
- 15. Analizando XML en Python usando el ejemplo de ElementTree
- 16. La lectura de un archivo de texto o un archivo XML en Java Android
- 17. Lectura de un gran archivo XML usando stax y dom
- 18. Crear tablas en un archivo de MS Word usando Java
- 19. ¿Cómo crear un menú contextual usando un archivo XML?
- 20. Actualización de un archivo XML usando Qt DOM
- 21. Encriptación AES simple usando WinAPI
- 22. ¿Cómo leo/escribo un archivo XML cifrado usando LINQ to XML?
- 23. cómo incrustar un archivo xml en un archivo de recursos
- 24. Consultas aleatorias en un archivo xml grande
- 25. Encriptación app.config Archivo
- 26. ¿Cómo convertir un archivo XML en SVG usando XSL?
- 27. Cómo convertir cadena a un archivo XML en Java
- 28. Encriptación y descifrado PGP con Java
- 29. ¿Cómo puedo convertir un archivo xml en JSON usando Python?
- 30. Java Anotaciones - en busca de un ejemplo de RetentionPolicy.CLASS
Ve con los enlaces de cb160, y asegúrate de obtener el código fuente de bouncycastle. La documentación de la API es en su mayoría pobre y, a menudo, muy pobre. Sin embargo, el código fuente es bastante legible y lo usé a menudo para responder preguntas como "¿qué tipo de CipherParameters necesita el RijndaelEngine?". Basta con mirar el método Rijndael relevante y será obvio. –