Chiffrement et déchiffrement PGP avec Java [fermé]


Je veux déchiffrer un fichier en utilisant des clés PGP.

J'ai téléchargé le programme d'installation des clés PGP et installé. En utilisant cela, j'ai créé un fichier texte et chiffré le fichier texte à l'aide des clés PGP.

Puis j'ai eu un .fichier d'extension pgp qui est crypté. Maintenant, je veux décrypter le même fichier en utilisant du code Java en utilisant PGP.

En Java, Comment déchiffrer un fichier texte déjà chiffré à l'aide de clés PGP?

Author: Ken Redler, 2012-03-07

5 answers

J'ai écrit un code complet en Java avec l'API BounceCastle et OpenPGP. Dans ce code source, vous trouverez comment générer la paire de clés, crypter et décrypter les fichiers. Jetez un oeil à: https://github.com/damico/OpenPgp-BounceCastle-Example

 5
Author: Damico, 2014-05-04 23:48:39

Essayez de voir ce sujet. Je viens d'y jeter un bref coup d'œil, mais je pense que c'est ce dont vous avez besoin. http://sloanseaman.com/wordpress/2012/05/13/revisited-pgp-encryptiondecryption-in-java/

 5
Author: MikhailSP, 2016-06-21 11:49:27

Vous pouvez écrire un wrapper simple autour de GNU PGP qui exécute essentiellement la commande GPG à partir de Java.

L'avantage d'utiliser GNU PGP est que vous ne serez pas lié à une bibliothèque spécifique. La quantité de documentation et de support disponible en ligne pour les bibliothèques tierces n'est pas aussi riche que les autres schémas de chiffrement, car la plupart invoquent PGP à partir de la ligne de commande. Les clés PGP resteront également dans un endroit commun, c'est-à-dire le porte-clés spécifique à l'utilisateur plutôt que d'être exportées en plusieurs fichier.

La commande GPG pour le déchiffrement est

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

En spécifiant passphrase-fd comme 0, vous pouvez fournir le mot de passe via le flux d'entrée standard.

Voici à quoi ressemble le code 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()
}
 4
Author: sunnyside, 2015-05-22 00:09:44

BouncyCastle a un certain support pour OpenPGP ("certain" car ils ne mentionnent que la RFC 2440 et non la RFC 4880 qui est plus récente). Vous pouvez également jeter un oeil à OpenPGPBlackbox paquet de notre SecureBlackbox (Java edition), qui fournit un support complet pour OpenPGP, y compris l'accès LDAP aux clés et d'autres fonctions avancées.

 3
Author: Eugene Mayevski 'Allied Bits, 2014-11-20 14:21:44

Essayez de jeter un oeil à JCA CryptoSpec . Je ne suis pas sûr de PGP, mais je pense que vous pouvez y trouver un fournisseur pour votre objectif.

Pour autant que je me souvienne du code devrait être quelque chose comme:

// 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();
 1
Author: MikhailSP, 2014-03-31 06:12:04