2013-01-04 95 views
7

我正在構建一個小型Web應用程序,該應用程序將爲每個插入的人員保留大約10條信息。由於數據保護,大部分信息必須加密。通配符搜索MySQL數據庫中的加密數據?

使用CodeIgniter框架和CodeIgniter加密類,我可以在應用程序端將信息存儲在數據庫中之前進行編碼。 CodeIgniter加密類使用PHP的mcrypt函數和AES_256密碼。

我遇到的問題是我需要允許應用程序的用戶搜索使用通配符搜索存儲的信息,也可能在以後通過API進行搜索。

任何機構都會遇到類似問題的解決方案。我已經閱讀了有關MySQL AES_ENCRYPT和AES_DECRYPT的內容,但他們仍然需要以明文形式傳遞密鑰,我不願意這樣做。

我目前的結論是,如果我希望繼續這條路線,那麼全表解密是我每次搜索時唯一的解決方案(顯然不好)。

回答

6

那麼,你不能在解密的文本中進行搜索而不先解碼,這是真的。

但是,這並不意味着沒有辦法解決這個問題。例如,您可以製作一個inverted index的數據和散列(sha1,md5,crc32,挑一個)用於搜索的鍵。所有你需要做的就是散列你正在使用的搜索條件,在索引中查找它們並檢索任何匹配的記錄,這只是表格的一小部分,而不是整個事物。

通過散列數據(使用salt!),避免以不安全的方式存儲數據,同時仍可以搜索數據,因爲您已爲其創建索引。直到你真正確定哪些文件匹配才需要解密。

+1

+1橫向思維,並使用散列,以確保敏感的關鍵字仍然保持敏感 –

+1

嗨感謝您的答覆,我想我明白你的建議,但索引仍然不會在嘗試做'where_in'或'like'搜索,例如:search%CHR%將返回一個記錄,其中包含單詞CHRIS。也許我讀錯了,如果有的話,你可以詳細說明一下。 – user1530205

+1

正確的通配符搜索實際上並不適用於倒排索引,但對於正常搜索非常有效。你可以做通配符搜索的唯一方法是解密整個事情。 –