微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 如何在jruby9.1.2.0中使用gpg加密加密文件?

我正在使用gpg加密加密文件,然后将其发送到我的j ruby项目中.但是我没有找到足够的资源.我试过使用 ruby-gpgme,但jruby不支持C库.我试着阅读 Bouncy Castle,但是我被类文档压倒了,没有找到一个用于加密文件的简单文章.

Vivek在this年的回答接近我的解决方案,但解决方案只有解决方案.我目前正在关注this article,并试图将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来帮助我,这将是一个很大的帮助.

更新1
ZIP值表示为整数值的常量,并列在this页.

更新2
我做到了功能

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

我有从OS生成的公钥.我如何从公钥字符串创建一个PGPPublic Key实例encKey?

解决方法

我找不到足够的答案或宝石来做,包括项目文件夹中的pgp库.所以我已经把 this repothis repo分配给了rails和系统的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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


应用场景 C端用户提交工单、工单创建完成之后、会发布一条工单创建完成的消息事件(异步消息)、MQ消费者收到消息之后、会通知各处理器处理该消息、各处理器处理完后都会发布一条将该工单写入搜索引擎的消息、最终该工单出现在搜索引擎、被工单处理人检索和处理。 事故异常体现 1、异常体现 从工单的流转记录发现、
线程类,设置有一个公共资源 package cn.org.chris.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @Descrip
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量
Java 9中JShell中的不同启动脚本是什么?
使用Java的位填充错误检测技术
java中string是什么
如何使用Java中的JSON-lib API将Map转换为JSON对象?