Я пытаюсь зашифровать файл, используя шифрование 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
из строки открытого ключа, которую у меня есть?