2012-01-08 13 views
2

私は暗号化された形式でファイルを格納するためのWebアプリケーションを作成していますが、後で非PHP環境で解読することができます。つまり、ユーザーがdoc.pdfという名前のファイルをアップロードしたとします。 それは暗号化され、暗号化された形式でサーバーに格納されます。その後、ユーザは、暗号化されたファイルを後でダウンロードし、自分のシステム上で解読することができる。PHPで外部プログラムを実行する効率的な方法は?

phpのmcrypt拡張を使って暗号化されたファイルは移植できないので、私は "encrypt"と呼ばれるプログラムを書くことにしました。それから私は、PHPでそれを呼び出す:

$return_var=exec("encrypt $file_path $key"); 

さて、私が考える別の方法は、基本的にソケットを介して要求を聴取する機能を備えた暗号化プログラムのラッパーである暗号化サーバを作成することでした。それで、PHPスクリプトがファイル名と暗号化する鍵を提供するようにこのプログラムに要求するようになりました。

暗号化サーバプログラムを別のコンピュータに置くことで、暗号化プロセスの負荷を簡単に調整できるため、これはもっと柔軟なアプローチになると思いました。

私の質問は、2つのアプローチのどちらが効率的であるか(速度、クライアントの大量の処理などに関して)ですか?

+1

暗号化を実行するものに着信データをストリーミングしてから直接ディスクに書き込むことができれば、本当に完済します。バッチプロセスであるかのようにファイルを処理することは、データをX回だけメモリにロードする必要があり、おそらくはディスクからでもロードする必要があるため、効率が低下します(潜在的に危険です)。 –

答えて

1

ほとんどの暗号化プロセスは、対称暗号化を実行するのに費やされます。 AES。 AESとほとんどの暗号の暗号化は比較的高速です。暗号化部分ではなくI/Oを待つ機会がたくさんあります。このためのサーバーアプリケーションを作成することは、ほぼ確実に過度のものです。私はまずローカルアプリケーションに向かい、本当に必要な場合は、基本的に最適化の後に戻します。

+0

私はuに同意しますが、私のメインサーバーで、Webサーバーとデータベースサーバーの両方が実行されていると言いますが、同じサーバーで暗号化を実行すると負荷が増える可能性があります。だから、サーバーアプリケーションを使う方が良いでしょう。どのようにI/Oをサーバー側で最適化することができますを使用して高速接続を言う。私が間違っている ?入力のためにbtw thanx – tnx1991

+0

私は@ owlsteadに同意します。おそらく、これをPHPで記述し、アプリケーションをクラスター化するのが最良の解決策になるでしょう。(つまり、クラウドに移動する) – Kaii

+0

@Kail Yeah、PHPアプリケーションのクラスタリング(必要に応じて)も私のソリューションになります。特殊なサーバーを作る唯一の理由は、パフォーマンス上の理由からではなく、アーキテクチャ上またはセキュリティ上の目的(キーを安全かつアクセス可能に保つこと)です。しかし、私はそれを働かせて(いくつかのCLIツールを作成して)、それから美化してそこから作業を始めます。 –

0

非常に巨大なオーバーヘッドを引き起こす外部プログラムを実行せずにPHPで暗号化を行うと、パフォーマンスが向上する可能性があります。

mcrypt拡張モジュールに見て:

http://de2.php.net/manual/en/mcrypt.examples.php

だけターゲットファイルへの結果の文字列を書き込みます。

+0

私は最初にそれについて考え、実装しました。しかし、Cプログラムを使ってファイルを解読すると、決してうまく動作しませんでした。私はそれをたくさん探し、php mcryptの拡張機能を使った暗号化が移植性がないことを発見しました。 – tnx1991

+0

それは移植性があります - おそらく、暗号化と復号化に互換性のない暗号を使用しました。すべての暗号パラメータを正しく取得すると、他のすべての言語でデータを暗号化できます。実際、mcryptはC関数の単なるラッパーです。 – Kaii

+0

さて、もし私が言うなら、私は私の実装をもう一度やります。 thanx – tnx1991

0

私は考えだけで、ユーザーが自分の側で任意の暗号解読ツールを必要としない方法で文書の理由からだけでZIP /パスワードを使用してファイルを圧縮し、ダウンロードするユーザーのために保存したパスワードを保つ、など

用暗号化/暗号化の保護は既に行われています。

私はあなたが求めているものではないことを認識していますが、単にホイールを再発明して、保護されたファイルと同じ結果を達成しないようにします。

+0

実際、私の要件は少し複雑です。ファイルごとに異なる複数の暗号化アルゴリズムを使用する必要があります。さらに、システムは文書に限定されるべきではありません。 – tnx1991