2011-12-08 18 views
0

ユーザーの電子メールをデータベースにプレーンテキストで保存する必要はなく、ルックアップを実行する必要がある場合は、暗号化(双方向でコンテンツを取得できるようにする方法)があり、簡単に検索できます値?双方向暗号化+ルックアップ?

EDIT 2つの列(表示用に暗号化されたものと参照用にハッシュされたもの)を格納しますか?

+0

"lookup"とは、復号化してプレーンテキストでパスワードを表示することですか? – hafichuk

+0

RSAまたはAESについてはどうですか? –

+0

「ユーザー電子メール」は「ユーザー電子メールアドレス」または「ユーザー電子メールメッセージ」を意味しますか? – dasblinkenlight

答えて

3

MySQLはこの種のもののためaes_encrypt()aes_decrypt()を持っていますが、あなたはまだあなたが同様ばかりで、クリアな電子メールアドレスの周りに渡すかもしれない意味で、クリアな暗号化キーを、渡しています。

基本的な方法は次のようなものになるだろう:

SELECT ... 
FROM yourtable 
WHERE encrypted_email = AES_ENCRYPT('[email protected]', 'crypt key here'); 

が、再び、あなたはキーを毎回送っているので、どのようなセキュリティを獲得することはないと思います。

+0

暗号化キーを明示的に送信せずに暗号化/復号化を実行する方法を教えてください。 –

+0

@ cable729できません。または、DBからすべてのアドレスを読み込み、アプリケーションコードで解読して、探しているものと一致する暗号化された値を探し出します。 – Romain

+0

@Marc Bまた、 "aes_encrypt()"を青色で表示するにはどうすればよいですか? :) –

0

どのようにデータを暗号化するかによって異なります。コードで暗号化を行い、暗号化された値を挿入していますか?もしそうなら、平文の値の代わりに暗号化された値を調べるだけで値を調べることができます。

擬似コード:今、あなただけの今までのワイヤの上に暗号化された情報を渡している

string encryptedEmail = Encrypt("[email protected]", myEncryptionKey); 
.... 
string sInsert = "INSERT INTO table (email) VALUES ('" + encryptedEmail + "')"; 
... 
string sSelect = "SELECT * FROM table WHERE email = '" + encryptedEmail + "'"; 

、鍵はどこにも行くことはありません。