2011-05-11 7 views
0

私はvb6とmysqlでクライアントソフトウェアを開発していました。これはテーブルですフルテーブル検索とデータ暗号化

CREATE TABLE IF NOT EXISTS `main_table` (
    `f_id` int(11) NOT NULL DEFAULT '0', 
    `id` mediumint(15) NOT NULL AUTO_INCREMENT, 
    `text_to_encrypt` mediumtext 
    PRIMARY KEY (`id`), 
    KEY `f_id` (`f_id`) 
); 

クライアントは、データがtext_to_encryptの列を暗号化したいと考えています。今ではデータを暗号化するのは非常に簡単ですが、実際の問題は、ユーザーが提供するキーワードに対して完全なテキスト検索が可能で、暗号化されたデータを復号化した後にデータを表示することです。このコラムには約900,000件があり、今後も増えていく予定です。私はWindows OS用のソリューションを求めています。何をすべきか?

答えて

0

クライアントは何かがどのように振る舞うべきかを決めるものである場合、クライアントは、あなたがそれを復号化することなく、キーワードで暗号化されたデータを検索することができないことを知ってを持っています。

これは、テーブルの内容全体を取り出し、解読してから検索することを意味します。

+0

はい、わかっていますが、毎回テーブルを復号化してから、検索してドロップすると、短時間で大きなレコードを復号化することができないため、多くの時間がかかります。 – Vineet1982

0

検索の対象となるすべてのテキストコンテンツを暗号化してインデックスを作成することを検討してください。テキストが "Hello world!"の場合暗号化された "hello"と "world"を保存してから、最初のレコードを書き込むときに暗号化されたテキストフィールドにマッピングされたものを検索します。

+1

ローリング暗号化や塩分などがないと仮定すると、暗号化は非常に弱いです。個々の単語は毎回同じ文字列に暗号化する必要があります。つまり、ROT暗号化以外の方法ではありません。 – Deanna

+0

それは公正な点です。そして、塩を使って、このような何か?私たちは、OPが持っているのと同様の問題を抱えており、私が提案したような方法を検討しています。以下は、途中で文字列を暗号化するためのalgです: $ salt = self :: getSalt(); $ string = trim($ string); $ size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128、MCRYPT_MODE_ECB); $ iv = mcrypt_create_iv($ size、MCRYPT_RAND); $ encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128、$ salt、$ string、MCRYPT_MODE_ECB、$ iv);return bin2hex($ encrypted); フィードバックいただきありがとうございます。 –

0

暗号化された列を検索することはできません。

単純にデータを暗号化する必要がある場合は、Transparent Database Encryption (TDE)とお考えですか?