構築中のオンライン PHP アプリケーションに機密データがあります。データをハッシュとしてデータベースに保存したいのですが、データベースから呼び出すたびにデータをデコードする必要があります。ハッシュが簡単にリバース エンジニアリングされないように構築されていることはわかっているので、最善の解決策を教えてください。
パスワードとは異なり、ハッシュ比較を行うことはできません。では、データベース内の情報をどのように保護すればよいでしょうか?
あなたが探しているのは、ハッシュではなく暗号化です。暗号化は双方向です。つまり、適切な情報を持っていると仮定して、コンテンツを表示するために暗号化を解除できます (そうしますが、詮索好きにはわかりません)。
PHP でこれを行う方法のコードについては、この投稿を参照してください。
暗号化ハッシュ関数は一方向関数です。つまり、元に戻すことはできません。あなたが探しているのは暗号化だと思います。これを行うには、 McryptまたはOpenSSL拡張機能を使用できます。私の推奨事項は、256 ビット キーでAESを使用して (ただし、キーを安全に保つ必要があることに注意してください)、データベースに挿入する前にデータを暗号化し、取得時に復号化することです。ここで、 MySQL が提供するメソッドを使用できますが、私は Mcrypt を使用します。安全を確保しようとしているデータの性質とおおよそのサイズを提供できる場合は、適切な操作モードをお勧めします。
Web 暗号化に関するこの記事を読んでみてください: http://www.alistapart.com/articles/web-cryptography-salted-hash-and-other-tasty-dishes/
次のように、SHA-1 ハッシュを使用して変数をエンコードできます。
sha1('password')
=> 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
MySQL は、データの暗号化と復号化をサポートしています。元:
INSERT INTO people (pet_name)
VALUES (AES_ENCRYPT('Schmoopie','my-secret-key'));
SELECT AES_DECRYPT(pet_name, 'my-secret-key') AS pet_name
FROM people;
これらの例は両方とも List Apart の記事からのものです。