[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 メーリングリストの案内