如何在jruby9.1.2.0中使用PGP加密文件?
2022-09-04 23:37:57
我正在尝试使用gpg加密文件,然后再将其发送到我的jruby项目中。然而,我没有找到足够的资源。我尝试使用ruby-gpgme,但jruby不支持C库。我尝试阅读弹跳城堡,但我被课堂文档所淹没,没有找到一篇简单的文章来加密文件。
Vivek在这个问题中的回答接近我的解决方案,但只有解密文件的解决方案。我目前正在关注这篇文章,并试图在jruby中连接java代码,但无济于事。我认为该功能是我需要的,如下所示: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
在
PGPCompressedDataGenerator comData = new PGPCompressedDataGenerator(PGPCompressedData.ZIP);
如果你能帮助我使用整个jruby中的gpg的代码或加密文件,那将是一个很大的帮助。
更新 1ZIP 值原来是整数值的常量,并在此页面中列出。
更新 2我把它做到函数:
PGPEncryptedDataGenerator encryptedDataGenerator = new PGPEncryptedDataGenerator(dataEncryptor);
encryptedDataGenerator.addMethod(new BcPublicKeyKeyEncryptionMethodGenerator(encKey)); // encKey is class PGPPublicKey's instance
我有从操作系统生成的公钥。如何从我拥有的公钥字符串创建 PGPPublic 密钥实例?encKey