这感觉应该很简单,但我没有任何运气。

场景是这样的:我有一个公共(public) *.asc key 文件。我想使用这个文件(不是我的个人 key 环)来加密服务器上的数据,以便我可以使用 key 在本地解密它。

从命令行我可以使用 gpg 来实现这一点,但我更喜欢使用一个 Ruby 库,它不仅仅是 CLI 的包装器(即,大概是一个提供与 C 库的绑定(bind)的库)。我查看了 GPGME 和 OpenPGP gems,但无法弄清楚如何使用它们。文档(尤其是 OpenPGP)非常稀少。

例如,这里是我尝试使用 GPGME 的东西,但没有任何运气:

key = GPGME::Data.new(File.open(path_to_file))
data = GPGME::Data.new("I want to encrypt this string.")

# Raises GPGME::Error::InvalidValue
GPGME::Ctx.new do |ctx|
  e = ctx.encrypt(key, data)
end

有没有人经历过这个?这当然不会那么复杂吗?

最佳答案

我相信我现在已经弄清楚了。它实际上只是我遗漏的一些简单部分:

  • 使用 GPGME::Ctxkeylist_mode 初始化 GPGME::KEYLIST_MODE_EXTERN 对象。
  • 使用 GPGME::Ctx#import 导入公钥文件。
  • 使用 GPGME::Crypto#encrypt 执行加密并指定正确的收件人。

  • 所以我的解决方案现在看起来像这样:
    key = GPGME::Data.new(File.open(path_to_file))
    data = GPGME::Data.new("I want to encrypt this string.")
    
    GPGME::Ctx.new(GPGME::KEYLIST_MODE_EXTERN) do |ctx|
      ctx.import(key)
      crypto = GPGME::Crypto.new(:armor => true, :always_trust => true)
      e = crypto.encrypt(data, :recipients => "recipient@domain.com")
    end
    

    关于ruby - 如何使用 OpenPGP 和 Ruby 对数据进行非对称加密?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11548337/

    10-14 13:46
    查看更多