2017-11-09 9 views
0

私がこれを行う必要があるのは初めてです。php cliを使って.pgpファイルを解読する方法

私はcliで動作するようにPHPでスクリプトを記述しなければなりません。スクリプトには解凍する.zipファイルが渡されます。内部のファイルは.pgpファイルであり、これらのファイルを復号化する必要があります。コード。

function decryptPGPFiles($pgpFiles, $passphrase){ 
    $res = gnupg_init(); 
    foreach($pgpFiles as $filename){ 
    gnupg_adddecryptkey($res,"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",$passphrase); 
    $cipher = file_get_contents($filename); 
    $plain = gnupg_decrypt($res,$cipher); 
    var_dump($plain); 
    die; 
    } 
} 

もちろん、 'var_dump($ plain);'と '死ぬ'テスト用です。とにかく$ plainは常にfalseです。 $ pgpFilesは、現在のディレクトリ内の.pgpファイルのファイル名の配列であると仮定します。

私は現在のディレクトリに 'private.gpg'という名前のプライベートキーを持っていますが、私は$パスフレーズも知っています。

私は 'gpg --import private.gpg'を実行し、次に 'gpg --fingerprint'を実行すると、関数 'gnupg_adddecryptkey'の2番目のパラメータがphp.netの$ fingerprintであることを知っています指紋とそれは私がパラメータとして渡しているものですが、とにかく指紋はいくつかの空白スペースで表示され、それらをトリムします。

私は正しい手順を踏んでいないと確信していますが、私には分かりやすい文書はありません。 php cliから.pgpファイルを解読することも可能ですか?

ありがとうございます。

+1

秘密鍵は、スクリプトを実行するために使用されるシステムユーザのGnuPGホームディレクトリにインポートされます(開発およびWebサーバのコンテキストによって異なる場合があります)。 'gpg --list-secret-keys'の結果は、指紋が参照するキーですか? –

+0

'gpg --list-secret-keys'を実行すると、インポートされた秘密鍵が表示されます。とにかく私はそれをあきらめて、あとは 'exec()'を使ってphpのlinuxコマンドラインを使用していました。 – Migdress

答えて

0

gnupg_adddecryptkey()の後にgnupg_geterror()を呼び出してみましたか?あなたの秘密鍵が実際に受け入れられていないと思われます。 PHPユーザーのGPGキーリング(つまり、GPGキーリングでなくても、スクリプトを呼び出しているもの)でなければならないと思いますか?また、いくつかの簡単なテストでは、端末のパスフレーズの入力を求められましたが、それは私のパラノイアのgpg config(パスフレーズキャッシングを完全に無効にしているため)の可能性があります。それは間違いなく上のコメントによると...エラーをトラップする別の方法は、実際に何が起こっているか見るためにERROR_EXCEPTIONまたは同様にgnupg_seterrormode()を設定することです

...非対話シナリオに

1

を物事を破りますドキュメント:のGnuPG VERSのよう

gnupg_decrypt

マイク

イオン2では、それ以上プレーンなパスワードを渡すことはできません。パラメータは単に無視されます。代わりに、cliモードで動作するPHPの場合には、ピンポンアプリケーションが起動されます。 cgiまたはapacheモードでは、キーを開くことができません。 最も簡単な解決策は、パスワードなしでキーを使用することです。

個人的には、個人的には、上記のようにパスワードなしでキーを使用することはほとんどありません。私はまだ、よりよい解決策を探していますが、このようなものは今のために働いています:潜在的に危険な変数を渡す場合

shell_exec("gpg --batch --passphrase \"" . $passphrase . "\" -d $file > $decrypted_file_name"); 

は)にescapeshellarg()またはescapeshellcmd(でこれを使用することを検討してください。

関連する問題