2017-03-08 55 views
1

我有一個要求,在我們的數據庫中加密客戶的會員編號。所以好吧,我們使用MS SQL Server,我想我使用encryptbypassphrase,改變每一個寫這個字段的地方加密和讀取它解密的每個地方,等等。加入加密字段

除了...有地方DB字段用於鏈接多個記錄。我認爲沒有問題,我只是將連接從「加入blahblah on a.member_number = b.member_number」更改爲「加入blahblah on a.member_number_encrypted = b.member_number_encrypted」。但是這不起作用,因爲我發現如果我加密兩次相同的值,我不會得到相同的加密值。我想這是在裏面加些鹽或什麼的。我不想說「加密blahblah在decryptbypassphrase(@pw,a.member_number_encrypted)= decryptbypassphrase(@pw,b.member_number_encrypted),因爲這將變成一個全文搜索索引查找。我認爲它會是醜陋的不得不索引更大的加密值,但...

所以...有什麼辦法強制encryptbypassphrase總是加密相同的輸入到相同的輸出?或者這是否意味着它是不實際參加在大多數情況下,加密字段?

還是我失去了一些東西?

回答

0

你在找什麼是deterministic encryption。 可以實現確定性通過使用明文散列作爲IV來加密,因此,每次對給定的明文進行加密時,都會得到相同的密文。請參閱this article以供參考。

如果您使用/可以使用MS SQL Server 2016,您應該查看Always Encrypted功能。取決於您想要對數據執行的操作。始終加密將使您的任務更輕鬆,因爲它支持確定性加密。幾個鏈接,將幫助你。

Getting Started with Always Encrypted
This feature will make it easier to test Always Encrypted without writing an app
Configure Always Encrypted using SQL Server Management Studio
I have briefly explained the security guarantee provided by Always Encrypted here

+0

「你正在尋找的是確定性的加密。」是。 「你正在使用/可以使用MS SQL Server 2016」可悲的是,我不是。我有2014年的sp2-gdr。 – Jay

+0

@Jay查看針對指針的更新答案 –