3

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

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

从命令行我可以使用gpg. 我查看了 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

有没有人经历过这个?这肯定不会那么复杂吧?

4

1 回答 1

2

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

  1. 用of初始化GPGME::Ctx对象。keylist_modeGPGME::KEYLIST_MODE_EXTERN
  2. 使用 . 导入公钥文件GPGME::Ctx#import
  3. 用于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
于 2012-07-18T20:02:38.703 回答