• ベストアンサー

GnuPGの複合化をパスフレーズ手入力なしで行うには?

このカテゴリでいいのかわかりませんが・・・ GnuPGを使って暗号化、複合化をしております。プログラム上(C++またはPHPまたはシェル)からパスフレーズを手入力せずに複合化できる仕組みを作りたいのですが、これは可能なのでしょうか? プログラム上で複合化して、そのデータを使って作業をしたいのですが、Cでパイプ接続してみたりしてみましたが、上手くできません。 そもそも、セキュリティの関係上できないのでしょうか? どうにかして、パスフレーズを自動入力させたいのです。 何かいい方法がありましたらご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 2つ方法があり、     (1) コマンドラインオプションで指定する     (2) gpg.confで指定する のいずれかの方法で実現可能です。 (1) コマンドラインオプションで指定する - --passphrase オプションを用い、     gpg --decrypt-file --passphrase 【使用するパスフレーズ】 ********.gpg など、と入力する。 (復号化などを行う対象のファイル名より前で指定する必要があります。) (2) gpg.confで指定する 『%homepath%\Application Data\gnupg\gpg.conf』を編集し、     passphrase 【使用するパスフレーズ】 の行を追加する。 (1)の方法では、 gpgをコールするところに直接パスフレーズを書くことになってしまうので、 ソースから秘密鍵のパスフレーズが丸見えになってしまいます。 なので、C++なら兎も角、PHPやシェルを用いて外部から使わせるのなら、 (2)を用い、 gpgをコールするときだけgpg.confを摩り替える、 といった方法になるのではないでしょうか。 #実はこの方法、--decrypt-filesオプションで #複数ファイルの複合化がうまくできなかったため、 #弄っていた時に発見しました。 #(どうやら、最初にdecryptした暗号化ファイルのsession-keyを #次以降のファイルにも適用してしまっているように見受けられる。) # #結局、(1)の方法を使って、 #    for %f in (*.gpg) do gpg --decrypt-file --passphrase ******** %f #とすることで対症療法としたのですが。 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (MingW32) iD8DBQFGaqGxrcznU0g5Wr4RCGD5AKCUBLDqIptN5b10AtZmQQCES0QuDgCeJnYs vTmwKdfuXD9lfpIXacKE0C0= =sn7Z -----END PGP SIGNATURE-----

Antares
質問者

お礼

ご回答ありがとうございます!! 助かりました! 結局、--passphraseというオプションではできなかったものの、それを元に調べて、「--passphrase-fd」というオプションで対応できました。 実はもうあきらめていたので、非常にうれしいです。 問題も解決しました。ありがとうございました。