7

私は、挿入されたすべての人に対して約10個の情報を保持する小さなWebアプリケーションを構築中です。データ保護のため、この情報の大部分は暗号化する必要があります。

CodeIgniter フレームワークと CodeIgniter 暗号化クラスを使用して、データベースに格納する前にアプリケーション側で情報をエンコードできます。CodeIgniter 暗号化クラスは、AES_256 暗号とともに PHP の mcrypt 関数を使用します。

私が抱えている問題は、アプリケーションのユーザーがワイルドカード検索を使用して保存された情報を検索できるようにする必要があることです。おそらく、後日 API を介して検索することもできます。

どんな体でも、同様の問題の解決策に出くわします。MySQL の AES_ENCRYPT と AES_DECRYPT について読んだことがありますが、プレーン テキストでキーをやり取りする必要がありますが、これは気が進まないことです。

私は現在、このルートを続行したい場合、検索が行われるたびに完全なテーブル復号化が唯一の解決策であるという結論に達しています (明らかに良くありません)。

4

1 に答える 1

6

ええと、復号化されたテキストを最初にデコードしないと検索できません。それは本当です。

ただし、これを回避する方法がないというわけではありません。たとえば、データの逆インデックスを作成し、検索に使用するキーをハッシュ (sha1、md5、crc32、いずれかを選択) することができます。あとは、使用している検索用語をハッシュし、それらをインデックスで調べて、一致するレコードを取得するだけです。これは、テーブル全体ではなくごく一部になります。

データをハッシュする (salt を使用してください!) ことで、安全でない方法でデータを保存することを回避できますが、インデックスを作成したため、データを検索することもできます。どのドキュメントが一致するかを実際に確認するまで、復号化は必要ありません。

于 2013-01-04T10:27:50.663 に答える