Шифрование и расшифровка PGP в java [duplicate]

Странно, моя проблема исходила из PHP.

Ошибка API REST API, и впоследствии она прерывала загрузку библиотек. Поскольку сбой был вызван вызовом REST, он не дал мне ошибку компиляции php.

Сохраните это как параметр, если загрузка jquery выглядит нормально.

29
задан Ken Redler 7 March 2012 в 07:52
поделиться

5 ответов

BouncyCastle имеет определенную поддержку OpenPGP («определенные», потому что они упоминают только RFC 2440, а не RFC 4880, который является более поздним). Также вы можете посмотреть пакет OpenPGPBlackbox нашего SecureBlackbox (версия Java), который обеспечивает полную поддержку OpenPGP, включая доступ LDAP к ключам и другим расширенным функциям.

3
ответ дан Christian 4 September 2018 в 07:24
поделиться

Я написал полный код на Java с API BounceCastle и OpenPGP. В этом исходном коде вы найдете способ генерации пары ключей, шифрования и дешифрования файлов. Взгляните на: https://github.com/damico/OpenPgp-BounceCastle-Example

5
ответ дан Damico 4 September 2018 в 07:24
поделиться

Попробуйте посмотреть эту тему. Я только что кратко остановился на этом, но я думаю, что это то, что вам нужно. http://sloanseaman.com/wordpress/2012/05/13/revisited-pgp-encryptiondecryption-in-java/

5
ответ дан George Hawkins 4 September 2018 в 07:24
поделиться

Попробуйте взглянуть на JCA CryptoSpec . Я не уверен в PGP, но я думаю, что вы можете найти там Провайдера для вашей цели.

Насколько я помню, код должен выглядеть примерно так:

// 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
ответ дан MikhailSP 4 September 2018 в 07:24
поделиться

Вы можете написать простую оболочку вокруг GNU PGP, которая в основном выполняет команду GPG из Java.

Преимущество использования GNU PGP заключается в том, что вы не будете привязаны к определенной библиотеке. Объем документации и поддержки, доступной онлайн для сторонних библиотек, не так богат, как другие схемы шифрования, поскольку большинство из них вызывают PGP из командной строки.

Команда GPG для дешифрования является

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

. Указывая парольную фразу, fd как 0 вы можете предоставить пароль через стандартный поток ввода.

Вот как выглядит код 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
ответ дан sunnyside 4 September 2018 в 07:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: