sql server通過AES加密,相同key和明文,會(huì)生成不同密文,如何優(yōu)化查詢效率

相同密碼key,同一個(gè)明文,通過AES加密后,可以產(chǎn)生多個(gè)不同密文,測試代碼如下:

declare @varBi0 varbinary(200)
set @varBi0 = EncryptByKey(Key_GUID('SymmetricByPW'), convert(varchar(200),'12345678'));
declare @varBi1 varbinary(200)
set @varBi1 = EncryptByKey(Key_GUID('SymmetricByPW'), convert(varchar(200),'12345678'));
declare @varBi3 varbinary(200)
set @varBi2 = EncryptByKey(Key_GUID('SymmetricByPW'), convert(varchar(200),'12345678'));

輸出結(jié)果如下:

@varBi0 = 0x00E87406A93C4643815DD2C78B175EFA0100000079DE70E53D4826B955C401992376CF1E6DDAB6C6972C24F81EF79E1FA2C7C2E819F1582FF249BA07AB32397412469FAA
@varBi1 = 0x00E87406A93C4643815DD2C78B175EFA010000004D42BF401511324FD4C6C873BC3FD314B2E0F45C1CA58D065EFE3BEB74C0EF43EDA1E3D0C65246034D9DDE7A98CEEB89
@varBi2 = 0x00E87406A93C4643815DD2C78B175EFA01000000B17606E5E86DE4518B758BFA4CF3D3B95F3B94E16821288F01F824454BF7947E1318295C344951D337699D36B058915C

可以看到輸出的三個(gè)參數(shù)都不一樣。通過decryptbykey函數(shù)解密可得到相同明文“12345678”。

那么如果數(shù)據(jù)庫里存儲(chǔ)的數(shù)據(jù)密文num_encrypt,如varBi0,varBi1,varBi2等。現(xiàn)在需要按照明文查找內(nèi)容,如果每一條都要解密后再查詢效率很低,sql如下:

select * from table where convert (varchar(200),decryptbykey(num_encrypt)) in ('12345678','','','')

如果先把明文加密,比對密文,那么每次加密后密文又不一樣,查找內(nèi)容為空。

那么有什么辦法能提高查詢效率呢?我這里采用的折中方法——“將明文加*存儲(chǔ),如12345678,存儲(chǔ)成5678,先匹配出后4位一致的,縮小范圍,再查找解密后一致的”

select * from (SELECT * FROM table
  where right([num],4) in ('5678','')) b
  where convert(varchar(200),decryptbykey(b.num_encrypt)) in ('12345678')

解決方案比較曲折,希望有更好方法的小伙伴留言解答,天天給你點(diǎn)贊哦!

參考內(nèi)容:

密文不同主要有以下原因:
??1.加密key的比特?cái)?shù)不同。有(128,192, 256),加密key比特?cái)?shù)不一樣,密文就不可能一樣。
??2.明文填充模式不一樣。因?yàn)锳ES是分組的,每32字節(jié)一組,不滿32字節(jié)的明文要填充到32字節(jié)。不同的填充方法肯定會(huì)造成密文的不一致。
??3.使用的AES加密模式不一樣,有四種模式(ECB、CBC、CFB、OFB) ,不同模式加密得到的密文顯然不會(huì)一樣
??4.還有一個(gè)就是是否使用初始化向量

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容