descifrar cifrar java encryption pgp

java - cifrar - pgp download



Cifrado y descifrado PGP con Java (5)

Quiero descifrar un archivo usando claves PGP.

He descargado el instalador de claves PGP e instalado. Usando eso, creé un archivo de texto y cifré el archivo de texto usando las claves PGP.

Luego obtuve un archivo de extensión .pgp que está encriptado. Ahora quiero descifrar el mismo archivo usando código Java usando PGP.

En Java, ¿cómo puedo descifrar un archivo de texto que ya está encriptado usando claves PGP?



Intenta echarle un vistazo a JCA CryptoSpec . No estoy seguro acerca de PGP, pero creo que puede encontrar un Proveedor para su propósito.

Por lo que recuerdo, el código debería ser algo así como:

// get cipher object for password-based encryption Cipher cipher1 = Cipher.getInstance("PBEWithMD5AndDES");//You have to pass here algorithm name which PGP uses. May be you have to find and init provider for it. // initialize cipher for decryption, using one of the // init() methods that takes an AlgorithmParameters // object, and pass it the algParams object from above cipher1.init(Cipher.DECRYPT_MODE, myKey, algParams); FileInputStream fis; FileOutputStream fos; CipherInputStream cis; fis = new FileInputStream("/tmp/a.txt"); cis = new CipherInputStream(fis, cipher1); fos = new FileOutputStream("/tmp/b.txt"); byte[] b = new byte[8]; int i = cis.read(b); while (i != -1) { fos.write(b, 0, i); i = cis.read(b); } fos.close();



Puede escribir un envoltorio simple alrededor de GNU PGP que básicamente ejecuta el comando GPG desde Java.

La ventaja de utilizar GNU PGP es que no estará vinculado a una biblioteca específica. La cantidad de documentación y soporte disponible en línea para bibliotecas de terceros no es tan abundante como otros esquemas de cifrado, ya que la mayoría de ellos invocan a PGP desde la línea de comandos. Las claves PGP también se mantendrán en un lugar común, es decir, el llavero específico del usuario en lugar de exportarse en múltiples archivos.

El comando GPG para descifrado es

echo "password" | gpg --passphrase-fd 0 --output plaintext.txt --decrypt encrypted.gpg

Al especificar passphrase-fd como 0, puede proporcionar la contraseña a través del flujo de entrada estándar.

Así es como se ve el código de Java:

public static void decryptFile(String privKeyPass) { String[] cmd = new String[]; int i = 7; cmd[i++] = "gpg"; cmd[i++] = "--passphrase-fd"; cmd[i++] = "0"; cmd[i++] = "--output"; cmd[i++] = "plaintext.txt"; cmd[i++] = "--decrypt"; cmd[i++] = "encrypted.gpg"; Process process = Runtime.getRuntime().exec(cmd); BufferedWriterout = new BufferedWriter(new OutputStreamWriter(process.getOutputStream())); out.write(privKeyPass); try { out.close(); } catch (IOException e) { e.printStackTrace(); } // Read process.getInputStream() // Read process.getErrorStream() }


BouncyCastle tiene cierto soporte para OpenPGP ("cierto" porque solo mencionan RFC 2440 y no RFC 4880, que es más reciente). También puede echar un vistazo al paquete OpenPGPBlackbox de nuestra SecureBlackbox (edición Java), que proporciona soporte completo para OpenPGP, incluido el acceso LDAP a las teclas y otras funciones avanzadas.