Sql Server簡單加密與解密 【轉】


前言:

      在SQL Server 2005和SQL Server 2008之前。如果希望加密敏感數據,如財務信息、工資或身份證號,必須借助外部應用程序或算法。SQL Server 2005引入內建數據加密的能力,使用證書、密鑰和系統函數的組合來完成。

    與數字證書類似。SQL Server 證書包括公鑰和私鑰這一對密鑰,它們都用來加密和解密數據。SQL Server也擁有創建非對稱密鑰和對稱密鑰對象的能力。非對稱密鑰(asymmetric key)與證書相似,公鑰用來加密數據庫,私鑰用來解密數據。非對稱密鑰和證書都提供了強大的加密強度。但在完成復雜的加密|解密過程中具有更多的性能開銷。更適合對大量數據進行加密,且具有較低性能開銷的解決方案是對稱密鑰(symmetric key),它是對相同數據進行加密和解密的一個密鑰。

    SQL Server允許將這些加密能力放到加密層次結構中。當安裝了SQL Server后,在數據庫master中創建名為服務主密鑰的服務器級別證書,並將其默綁定到SQL Server服務賬號登錄名。服務主密鑰用來加密所有其他數據庫證書和創建在SQL Server實例中的密鑰。另外,你也可以在用戶數據庫中創建數據庫主密鑰(Database Master Key),它可以用來加密數據庫證書和密鑰。

    在SQL Server 2008中,微軟引入了透明數據加密(TDE),它對整個數據庫進行加密,而不需要修改任何訪問它的應用程序。數據、日志文件和相關的數據庫備份都是加密的。假如數據庫被偷,如果沒有數據庫加密密鑰(DEK)是不能訪問數據的。

 

一、通過通行短語(PassPhrase)加密

     對於不涉及證書及密鑰的應急的數據加密,可以直接基於用戶提供的密碼來加密和解密數據。通行短語(PassPhrase)是允許存在空格的密碼。這個PassPhrase不會存儲在數據庫中,因而也就意味着不會被使用存儲的系統數據“破解”。同時,可以使用空格創建一個長的、易於記憶的句子來加密和解密敏感數據。

我們需要了解的一對函數是

ENCRYPTBYPASSPHRASE(http://technet.microsoft.com/zh-cn/library/ms190357.aspx

DECRYPTBYPASSPHRASE(http://technet.microsoft.com/zh-cn/library/ms188910.aspx

這一對函數必須使用相同的參數。

    我們看一個示例:

--------加密函數-----------
CREATE FUNCTION dbo.EncryptByPassPhrasePwd(@password nvarchar(50))
RETURNS varbinary(max)
AS  
BEGIN 
    declare @pwd varbinary(max)
 SELECT @pwd = EncryptByPassPhrase(
 '1234567',            
 @password)
    return @pwd
END
---------解密函數----------
CREATE  FUNCTION dbo.DecryptByPassPhrasePwd(@password varbinary(max))
RETURNS nvarchar(max)
AS  
BEGIN 
    declare @pwd nvarchar(max)
 SELECT @pwd =CAST( DecryptByPassPhrase('1234567',@password)  as nvarchar(max))
    return @pwd
END
注意:123456 是用於生成對稱密鑰的通行短語
select dbo.EncryptByPassPhrasePwd('test11') as result
select dbo.DecryptByPassPhrasePwd(0x010000004779C35F96DACC0EC6A8C518E186D203B1A336EE5B8A51B4271B54F56F516ECE) as result

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM