[PHP-users 26941] proc_open()を使用してGnuPGの復号化をしたい

matsui 9999 matsumatsu9999 @ hotmail.co.jp
2005年 9月 20日 (火) 19:37:29 JST


こんばんは、Matsuiと申します。

GnuPGを使用してテキストファイルを暗号化、複合化したいと思い
proc_open()を使用してプログラムを組んでいます。

暗号化は簡単にできたのですが
複合化で失敗して悩んでいます。

以下、複合化のプログラムです。
----------------------------------------
<?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 = "himitu"; // パスフレーズ
$process = proc_open("gpg --output {$plain} --decrypt {$crypted}", 
$descriptorspec, $pipes);

if(is_resource($process)){
 fwrite($pipes[0], $pass_phrase);
 
 fclose($pipes[0]);
 fclose($pipes[1]);
 
 proc_close($process);
}
?>
----------------------------------------
このプログラムを実行すると/tmp/error.txtに
gpg: cannot open /dev/tty: そのようなデバイスやアドレスはありません
と追記されます。

proc_open()で指定しているgpgコマンドを、
SSH接続をしてコマンドで実行するとパスフレーズを聞いてきます。
パスフレーズを入力すると復号化できます。

PHPからproc_open()を使用すると動作しません。
PHPで実行するには何か設定がいるのでしょうか?

http://php.new21.com/manual/ja/function.proc-open.php
ここに
PGPやGPG、opensslといったプログラムにパスフレーズを
より安全な方法で渡したいとき威力を発揮します。

と書かれているのでできると思っているのですが失敗します。

どなたかヒントになりそうなアドバイスでも
構わないので頂けないでしょうか?
よろしくお願いします。

■環境
CentOS 3 / Apache 2.0.46(rpm) / PHP 4.3.2(rpm) / GnuPG 1.2.1(rpm)
PHPの実行ユーザはapacheです。
wwwディレクトリはrootの持物だったのでapacheユーザ変更しました。
鍵もapacheユーザで作成しました。
gpgのパスをフルパスで指定したり--homedirで指定しても失敗しました。

_________________________________________________________________
無料でメールボックス250MBの 「MSN Hotmail」 
http://promotion.msn.co.jp/hotmail/fortune/input_un.asp 



PHP-users メーリングリストの案内