2017-10-10 60 views
3

查詢描述:假設我有一個數據庫表,它以加密形式存儲所有用戶的數據。我有一個管理員可以搜索用戶數據的功能。現在問題是,管理員將在文本框中輸入正常文本,並且必須根據管理員的輸入過濾用戶列表(在每次文本更改時)。與此同時,我有一些加密形式的數據,我必須根據Admin輸入的正常文本進行過濾。關於MySQL中加密數據的搜索過濾器

我到現在爲止提出的解決方案是,我首先解密所有數據,然後應用過濾器。但是我很想知道,如果我的數據庫中有數百萬條記錄,那麼現在的方式似乎是無用的和低效的。

任何人都可以幫助我以最有效的方式搜索加密數據嗎?

任何幫助將不勝感激!

謝謝。

+2

https://dba.stackexchange.com/questions/23908/how-to-search-a-mysql-database-with-encrypted-fields這可能會幫助你 –

+0

加密關鍵字 – mewc

+0

@mewc:加密值可能不同對每一個文本的改變。 –

回答

0

我到現在爲止提出的解決方案是,我首先解密所有數據,然後應用過濾器。但是我很想知道,如果我的數據庫中有數百萬條記錄,那麼現在的方式似乎是無用的和低效的。

你是對的,這不是一個可擴展的解決方案。如果您想深入瞭解此問題,請參閱:Building Searchable Encrypted Databases with PHP and SQL

你想要做的是:

  1. 存儲加密數據,不被使用認證加密
  2. 將明文密碼與密文一起存儲
    • 盲指數可以HMAC-SHA256(plaintext, separate_key)
    • 敏感值應使用sodium_crypto_pwhash()hash_pbkdf2()代替。
    • 爲了節省空間,請截斷盲目索引並將其視爲Bloom過濾器。

這給你兩全其美:抵抗被動和主動攻擊數據加密,同時也允許在快速SELECT查詢使用。