證書和非對稱密鑰使用數據庫級的內部公鑰加密數據,并且使用數據庫級內部私鑰解密數據。而對稱密鑰相對簡單,它們包含一個同時用來加密和解密的密鑰。困此,使用對稱密鑰加密數據更快,并且用在大數據時更加合適。盡管復雜度是考慮使用它的因素,但它仍然是一個很好的加密數據的選擇。
我們看一組例子:
示例一、創建對稱密鑰
對稱密鑰的特性是:在數據庫會話中使用它對數據進行加密和解密前必須首先打開。
創建對稱密鑰使用如下命令:
CREATE SYMMETRIC KEY 創建對稱密鑰。( http://msdn.microsoft.com/en-us/library/ms188357.aspx )
示例二、查看當前數據庫中的對稱密鑰
使用目錄視圖sys.symmetric_keys( http://msdn.microsoft.com/en-us/library/ms189446.aspx )來查看。
示例三、修改非對稱密鑰的加密方式
你可以使用ALTER SYMMETRIC KEY( http://technet.microsoft.com/en-us/library/ms189440.aspx )命令修改對稱密鑰的加密方式。但執行前必須使用OPEN SYMMETRIC KEY( http://msdn.microsoft.com/en-us/library/ms190499.aspx )命令打開它。
示例四、使用對稱密鑰對數據進行加密和解密 。
1、為了使用對稱密鑰對數據進行加密,必須首先打開它,然后使用函數EncryptByKey 加密數據。( http://msdn.microsoft.com/zh-cn/library/ms174361.aspx )
2、使用DecryptByKey來解密使用對稱密鑰加密的數據。注意DecryptByKey不像甩EncryptByKey,無須使用對稱密鑰GUID。因此,為了解密,必須打開正確的對稱密鑰會話,否則會顯示null。
下面是一個例子:
查看未加密的數據:
至此,好像已經大功告成了,別,千萬別高興得太早!
這里有個問題,如果惡意用戶不知道CustomerID=13的PasswordHintAnswer列的真實值,但知道CustomerID=14的PasswordHintAnswer列的真實值,則完全可以通過 惡意替換 PasswordHintAnswer列而繞過加密!! 3w@live.cn 此時,我們索性連 CustomerID列作為驗證列也一起加密,以絕后患 !
注意: 加密的驗證列 也可以由 另一個相關表的列 作為參數傳入。
看一個完整的例子:
惡意替換開始:
此時,我們再查看:
郎勒個郎!爽吧!雖然復制了相同的二進制數據,可是讀取結果令攻擊者大失所望啊!
示例五、刪除對稱密鑰
命令:DROP SYMMETRIC KEY 刪除指定的對稱密鑰( http://technet.microsoft.com/en-us/library/ms182698.aspx )
例子:
注意:如果加密密鑰打開沒有關閉,則drop失敗。
小結:
1、本文主要介紹對稱密鑰的創建、刪除、查看以及用它來修改加密方式、進行數據的加密和解密。
2、對稱密鑰的特性是:在數據庫會話中使用它對數據進行加密和解密前必須首先打開。
3、對稱密鑰可用于大數據的加密。
下文將主要介紹證書加密(Certificate Encryption)
助人等于自助! 3w@live.cn
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
