Как зашифровать файл с использованием gpg-шифрования в jruby9.1.2.0?

Я пытаюсь зашифровать файл, используя шифрование gpg, прежде чем отправлять его в мой проект jruby. Однако я не нашел для этого достаточных ресурсов. Я попытался использовать ruby-gpgme, но jruby не поддерживал библиотеки C. Я пробовал читать Bouncy Castle, но я был ошеломлен документацией по классу и не нашел простой статьи для шифрования файла.

Vivek answern в этом вопросе приближается к моему решению, но есть только решение для дешифрования файла. В настоящее время я следую этой статье и пытается связать java-код в jruby безрезультатно. Я думаю, что функция encryptFile - это то, что мне нужно, это следующее:

public static void encryptFile(
        OutputStream out,
        String fileName,
        PGPPublicKey encKey,
        boolean armor,
        boolean withIntegrityCheck)
        throws IOException, NoSuchProviderException, PGPException
    {
        Security.addProvider(new BouncyCastleProvider());

        if (armor) {
            out = new ArmoredOutputStream(out);
        }

        ByteArrayOutputStream bOut = new ByteArrayOutputStream();
        PGPCompressedDataGenerator comData = new PGPCompressedDataGenerator(PGPCompressedData.ZIP);

        PGPUtil.writeFileToLiteralData(
                comData.open(bOut),
                PGPLiteralData.BINARY,
                new File(fileName) );

        comData.close();

        BcPGPDataEncryptorBuilder dataEncryptor = new BcPGPDataEncryptorBuilder(PGPEncryptedData.TRIPLE_DES);
        dataEncryptor.setWithIntegrityPacket(withIntegrityCheck);
        dataEncryptor.setSecureRandom(new SecureRandom());

        PGPEncryptedDataGenerator encryptedDataGenerator = new PGPEncryptedDataGenerator(dataEncryptor);
        encryptedDataGenerator.addMethod(new BcPublicKeyKeyEncryptionMethodGenerator(encKey));

        byte[] bytes = bOut.toByteArray();
        OutputStream cOut = encryptedDataGenerator.open(out, bytes.length);
        cOut.write(bytes);
        cOut.close();
        out.close();
    }

)

Я получаю следующую ошибку:

NoMethodError: undefined method `ZIP' for Java::OrgBouncycastleOpenpgp::PGPCompressedData:Class

at

 PGPCompressedDataGenerator comData = new PGPCompressedDataGenerator(PGPCompressedData.ZIP);

Было бы очень полезно, если бы вы могли помочь мне с кодом или с файлом шифрования, используя gpg в jruby в целом.

Обновление 1 Значение ZIP оказывается постоянным целочисленным значением и указано в этой странице.

Обновление 2 Я сделал это до функции:

PGPEncryptedDataGenerator encryptedDataGenerator = new PGPEncryptedDataGenerator(dataEncryptor);
    encryptedDataGenerator.addMethod(new BcPublicKeyKeyEncryptionMethodGenerator(encKey)); // encKey is class PGPPublicKey instance

У меня есть открытый ключ, созданный из ОС. Как создать экземпляр PGPPublic Key encKey из строки открытого ключа, которую у меня есть?

Ответ 1

Я не мог найти достаточно ответа или камня, чтобы сделать это, включая библиотеку pgp в папке проекта. Поэтому я отклонил это репо на это репо на интерфейсные рельсы и библиотеку gpg системы. Он работает на ubuntu. Я не тестировал его на других машинах.

Шифрование:

В машине с установленным открытым ключом

encryptObj = Gpgr::Encrypt::GpgFileForEncryption.new
encryptObj.email_address = <email_of_gpg_owner>
encryptObj.file = <path_to_file_to_encrypt>
encryptObj.file_output = <path_to_output_file>
encryptObj.encrypt

дешифрование

В машине с закрытым ключом

decryptObj = Gpgr::Decrypt::GpgFileForDecryption.new
decryptObj.file = <path_to_file_to_decrypt>
decryptObj.file_output = <path_to_output_file>
decryptObj.decrypt