SQL - SQL Server 2008 加密與解密實作心得 (一)

摘要:SQL - SQL Server 2008 加密與解密實作心得 (一)

最近很不認真的在看 楊志強先生 的書籍,為什麼這麼說呢!? 因為小弟看書不怎麼喜歡一章一章看,比較喜歡挑自己有興趣的章節看。其中對於書中的一個章節特別有感覺,那就是「資料加密與解密」的部份,因為這部份對於 我來說,是非常難碰到的,所以才對這章節特別感興趣,那麼以下就來說說小弟的實作心得唄...

首先先建立一個資料表,資料表格式與新增資料





在 MS SQL 中,有五種資料加密與解密的方式:

1.利用 Convert 來進行資料加密

Code:

Select *,
CONVERT(varbinary(512), 身分證) as '加密',
CONVERT(char(10), CONVERT(varbinary(512), 身分證)) as '解密'
From dbo.使用者資料

結果:


心得:在 Code 中紅色字體的部份,也可換成「Image」或「binary」均可,主要是將欄位資料,換為「二進位」顯示。所以當你知道作法時,這種加密方式,可以說是把自己的眼睛矇起來騙自己罷了...呵呵

參考資料:
CAST 和 CONVERT (Transact-SQL)

2.對稱金鑰加解密:這種加密方式必須要建立「對稱金鑰」

Code:建立對稱金鑰

CREATE SYMMETRIC KEY [對稱金鑰]
WITH ALGORITHM = Triple_DES
         ENCRYPTION BY PASSWORD = '張小呆'

結果:


Code:進行資料加密

--開啟對稱金鑰
OPEN SYMMETRIC KEY 對稱金鑰 DECRYPTION BY PASSWORD = '張小呆';

--進行資料加密
Select *,
EncryptByKey(Key_GUID('對稱金鑰'), 身分證) as '加密'
From dbo.使用者資料

結果:


Code:進行資料解密

--開啟對稱金鑰
OPEN SYMMETRIC KEY 對稱金鑰 DECRYPTION BY PASSWORD = '張小呆';

Create Table #table(
 f_使用者名稱 nvarchar(10),
 f_身分證 char(10),
 f_加密 varbinary(max)
);

Insert into #table
Select *,
EncryptByKey(Key_GUID('對稱金鑰'), 身分證) as '加密'
From dbo.使用者資料

--進行資料解密
Select *,
CONVERT(char(10), DecryptByKey(f_加密)) AS '解密'
From #table

Drop Table #table

結果:


心得:這比較適合大量資料進行加密,且耗用的系統資源也沒那麼重,所以對於要大量加密時,是非常好用的。

參考:
CREATE SYMMETRIC KEY (Transact-SQL)
OPEN SYMMETRIC KEY (Transact-SQL)
CLOSE SYMMETRIC KEY (Transact-SQL)
sys.symmetric_keys (Transact-SQL)
ENCRYPTBYKEY (Transact-SQL)
DECRYPTBYKEY (Transact-SQL)