[PHP-users 26946] Re: proc_open()を使用してGnuPGの復号化をしたい
matsui 9999
matsumatsu9999 @ hotmail.co.jp
2005年 9月 21日 (水) 18:29:49 JST
Matsuiです。
喜瀬“冬猫”浩 さん、高橋さん、かなださん、
アドバイスありがとうございます。
>パスフレーズなしの鍵を作る、という方法もあります。参考までに。
パスフレーズ無の鍵を使用したら
同じプログラムで復号化できました!
今は何故、パスフレーズ有の鍵で失敗するのか気になっています。
>/dev/ttyへの書き込みができないということかな?
>/dev/ttyのパーミッションを確認されたらいかがでしょうか。
>参考までに手元にあるサーバ(OSは異なりますが)ではcrw-rw-rw-でした。
パーミッションを確認したところ同じでした。
試しにcrwxrwxrwxにして、パスフレーズ有の鍵で
同じプログラムを実行したところ同じ症状が発生します。
復号化できませんでした。
/tmp/error.txtに
gpg: cannot open /dev/tty: そのようなデバイスやアドレスはありません
と追記されます。
>batchmodeを追っかけてみると、gpgのオプ
>ションに--batchをつけるとbatchmodeがセットされる(で、
>ttypfpがstderrにセットされる)ようです(解決になるかど
>うか分かりませんが)。
batchモード(非対話モード)で実行してみました。
パスフレーズ有の鍵でも、この方法だと復号化できました。
----------------------------------------
<?php
// GnuPGのPATH
putenv("GNUPGHOME=/var/www/.gnupg");
// ファイル指定
$plain = "/var/www/doc"; // 出力したい平文ファイル
$crypted = "/var/www/doc.gpg"; // 暗号化しているファイル
// GnuPGを実行しファイルを復号化する
$descriptorspec = array(
0 => array("pipe", "r"), // 標準入力
1 => array("pipe", "w"), // 標準出力
2 => array("file", "/tmp/error.txt", "a") // エラー出力
);
$pass_phrase = "/var/www/himitufile"; // パスフレーズを保存した平文ファイル
$command = "cat {$pass_phrase} | gpg --no-tty --batch --passphrase-fd 0
--output {$plain} --decrypt {$crypted}";
$process = proc_open($command, $descriptorspec, $pipes);
if(is_resource($process)){
// 非対話なので何もしない
fclose($pipes[0]);
fclose($pipes[1]);
proc_close($process);
}
?>
----------------------------------------
・・・proc_open()を使う意味が薄れてしまいました。
proc_open()を使用しなくてもsystem()で実現できました。
対話モードでパスフレーズを渡せない事が気になっていますが
PHPでGnuPGによる暗号化、復号化をする事ができました。
どうもありがとうございました。
_________________________________________________________________
無料でメールボックス250MBの 「MSN Hotmail」 http://www.hotmail.com/
PHP-users メーリングリストの案内