3

これはとても単純なはずのように感じますが、私には運がありません。

シナリオは次のとおりです。公開*.ascキーファイルがあります。このファイル(個人のキーリングではない)を使用してサーバー上のデータを暗号化し、秘密鍵を使用してローカルでデータを復号化できるようにします。

コマンドラインからは、を使用してこれを実現できgpgますが、CLIの単なるラッパーではないRubyライブラリ(つまり、おそらくCライブラリへのバインディングを提供するライブラリ)を使用したいと思います。私はGPGMEとOpenPGPの宝石を見てきましたが、それらの使用方法を理解できませんでした。ドキュメント(特に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. GPGME::Ctxのでオブジェクトを初期化しkeylist_modeますGPGME::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 に答える