###前提・実現したいこと
入力されたデータを暗号化してデータベースに登録、登録したデータを部分一致検索で表示するようなシステムを作ろうとしているのですが、こういった場合どのような暗号化の方法を取るのがベタでしょうか。
開発言語はjavaで、データベースはSql Serverを想定しています。
システムとしては、画面で入力された氏名と住所を暗号化してデータベースに保存するというものです。
暗号化の方法を考えたとき、私は最初にJavaのシステム側(JavaのCipherクラスとかその他有名な暗号化ライブラリ)で入力内容を暗号化し、暗号化したものをデータベースにINSERTすればいいと考えました。
しかし、この方法だと仮に氏名や住所を部分一致検索して表示するという機能を作ろうと思ったときに、データが暗号化されているため検索できなくなってしまうと思いました。
Javaシステム側で全てのデータをSELECTで持ってきた上で一つ一つ復号して一致するか調べようかとも思ったのですがあまり賢くないような気がしたのでほかの方法を探したところ、
SQL ServerにはENCRYPTBYKEY関数やENCRYPTBYPASSPHRASE関数といったデータを暗号化できる関数が用意されていると知りました。
こういった、データベースエンジンの用意する暗号化関数を利用すれば、部分一致検索もできるらしいというのはわかったのですが、色々調べていると暗号化された列を検索するのがそもそも良くないといった話も見かけて何を選ぶべきか迷ってしまいました。
プログラム側で暗号化する場合とデータベースエンジンの関数で暗号化する場合の使い分けや、メリットデメリットについて教えていただけるとうれしいです。
見てたところ
個人情報を守るためのデータの暗号化とユーザビリティ
PHP+MySQLでのデータの暗号化、セキュリティなどについて
第3回 個人情報保護法とIT (3) 暗号化|これからの銀行を支えるIT戦略

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。