<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
對於一些敏感欄位,比如手機號碼、身份證、地址、銀行卡號等,我們在存放進資料庫前,可能需要對其進行加密。
大部分情況下,我們只需要支援等值查詢。但是如果需要支援模糊查詢,那麼整段內容整體加密就不具備這個能力。
下面是幾種解決辦法,場景是我們需要根據手機號碼的字首進行匹配。
因為伺服器肯定是具備解密密文的能力的,因此最簡單的方式就是把整個表的密文欄位資料拉下來,在伺服器端進行解密,然後再在伺服器端進行匹配。
findRecords(prefix) { records = getAllRecords() finds = [] for (record : records) { phone = decrypt(record.phone) if (phone.hasPrefix(prefix)) { finds.push(record) } } return finds }
如果資料量很小,那麼這種做法也許還能夠接受。但是隻要資料量上去,那麼效率就會很低,而且還需要通過網路IO把整個表的資料傳輸到伺服器端。
上面的做法需要把整個表的資料傳輸到伺服器端,那麼我們只需要能夠在資料庫進行匹配,就不需要傳輸整個表了。因此我們也可以在資料庫實現解密演演算法,在匹配的時候用解密演演算法解密密文,就能夠進行模糊匹配了。
findRecords(prefix) { return query("select * from table where decrypt(phone) like '?%'", prefix) }
這個做法也是需要遍歷整個資料庫,因此只適合資料量比較小的情況下;而且需要把金鑰傳給資料庫,增加了金鑰洩露的風險。
上面的做法我們都沒有用到資料庫的索引能力,正常情況下,字首匹配我們是可以使用到索引的,比如where phone like 'prefix%'。如果加密後的密文,也能夠走索引,那麼我們就不需要遍歷整個資料表了。
比如我們可以根據4位元作為一個檢索條件,將手機號碼拆分位多個分片:比如手機號012345678901,我們可以拆分並對分片進行加密:
分片 | 密文 |
---|---|
0123 | /egpaR5G9sMQUUWWz+3CLg |
1234 | eHCMZqxNSLx/B37koArx/w |
2345 | 9w1Pv8ik2H41s1KORLfPHA |
3456 | vcFFFvi0mwAgIjdSQjcmSw |
4567 | Tr/WaYfVySyMJhcZ78RFlA |
5678 | 2wFeC6sgdXX7wmo0YcYY/Q |
6789 | FfO9qD9XPx/lnJJuTfTfaA |
7890 | Wufth7zOBLEy2LmepG5Taw |
8901 | 1xR5MHRmlqOac5X6Cmn3kA |
這些密文拼接起來的串為:
/egpaR5G9sMQUUWWz+3CLgeHCMZqxNSLx/B37koArx/w9w1Pv8ik2H41s1KORLfPHAvcFFFvi0mwAgIjdSQjcmSwTr/WaYfVySyMJhcZ78RFlA2wFeC6sgdXX7wmo0YcYY/QFfO9qD9XPx/lnJJuTfTfaAWufth7zOBLEy2LmepG5Taw1xR5MHRmlqOac5X6Cmn3kA
然後就可以支援字首查詢了(最少4位元),比如字首01234,我們可以按照上面的分片方式先分片,再拼接為查詢串:
分片 | 密文 |
---|---|
0123 | /egpaR5G9sMQUUWWz+3CLg |
1234 | eHCMZqxNSLx/B37koArx/w |
查詢串:
/egpaR5G9sMQUUWWz+3CLgeHCMZqxNSLx/B37koArx/w
可以看到查詢串為上面的字首,因此可以進行字首查詢!
這種方式也是會有一定的代價的:
比如手機號碼是明文長度是11,但是按照4位元分片的密文長度是198
分片太短有安全問題,因此沒辦法支援過短的查詢。
主要是因為切片過短,會很容易被猜出來每一位對應的密文。比如0-9的密文切片長度1切分:
分片 | 密文 |
---|---|
0 | hHjJXA0e+haw/+WZ1mFITA |
1 | y7qHn2nn3Ne/6wNRiwl/Lg |
2 | h0dmfkO5SUolFFLp8J2Y5A |
3 | ma/XrJjPv2MXSXE7Y4xs8w |
4 | Q9V4PXXPjJgdR7UChUMY1g |
5 | Wo57z24UXLoBdQ7QzxlOqA |
6 | fC+zrF4ga5TCb5Zu36KVrQ |
7 | z+XqHaWmlAsCnIP6NnD3lg |
8 | olm8cPYmLHCeD1jegauiWw |
9 | hJS77tLMd2Ol5SU4dIbbpw |
只有10種分片型別,如果對應的是手機號碼欄位,很容易根據統計每個數位的概率分佈猜出每個數位對應的密文。
可能有兩個不同分片對應相同密文,這時候就需要在伺服器再過濾一遍。
參考
實現
Golang實現基於AES+CBC+PKCS5Padding的可模糊查詢加密
以上就是資料庫加密欄位進行模糊查詢詳解的詳細內容,更多關於資料庫加密欄位模糊查詢的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45