摘要:SQL - SQL Server 2008 加密與解密實作心得 (二)
接續上一篇,繼續來介紹其他三種加密與解密的方式。
3.非對稱金鑰加解密:這種加解密方式必須要建立「非對稱金鑰」
Code:建立非對稱金鑰
Code:進行資料解密
WITH ALGORITHM = RSA_2048
ENCRYPTION BY PASSWORD = '張小呆';
GO
結果:
Code:進行資料加密
ENCRYPTBYASYMKEY(ASYMKEY_ID('非對稱金鑰'),
CONVERT(nvarchar(max), 身分證)) as '加密'
From dbo.使用者資料
結果:
Code:進行資料解密
f_使用者名稱 nvarchar(10),
f_身分證 char(10),
f_加密 varbinary(max)
);
Insert into #table
Select *,
ENCRYPTBYASYMKEY(ASYMKEY_ID('非對稱金鑰'),
CONVERT(nvarchar(max), 身分證)) as '加密'
From dbo.使用者資料
--進行資料解密
Select *,
CONVERT(nvarchar(10), DECRYPTBYASYMKEY(ASYMKEY_ID('非對稱金鑰'), f_加密, N'張小呆')) as '解密'
From #table
Drop Table #table
結果:
心得:非對稱金鑰安全性比對稱金鑰安全,因為非對稱金鑰安全性高,且加解密的方式也比對稱金鑰要來的複雜,所以在大量加密資料時,會佔用較多的系統資源。所以,這就要看各公司的內政嚕...
參考:
CREATE ASYMMETRIC KEY (Transact-SQL)
ALTER ASYMMETRIC KEY (Transact-SQL)
DROP ASYMMETRIC KEY (Transact-SQL)
選擇加密演算法
加密階層
了解可延伸金鑰管理 (EKM)
4.憑證加解密:這種加解密方式必須要建立「憑證」
Code:建立憑證
ENCRYPTION BY PASSWORD = '張小呆'
WITH SUBJECT = '憑證加解密',
START_DATE = '2009/08/22',
EXPIRY_DATE = '2009/12/31';
GO
結果:
Code:進行資料加密
ENCRYPTBYCERT(Cert_ID('憑證加解密'),
CONVERT(nvarchar(max), 身分證)) as '加密'
From dbo.使用者資料
結果:
f_使用者名稱 nvarchar(10),
f_身分證 char(10),
f_加密 varbinary(max)
);
Insert into #table
Select *,
ENCRYPTBYCERT(Cert_ID('憑證加解密'),
CONVERT(nvarchar(max), 身分證)) as '加密'
From dbo.使用者資料
--進行資料解密
Select *,
CONVERT(nvarchar(10), DECRYPTBYCERT(Cert_ID('憑證加解密'), f_加密, N'張小呆')) as '解密'
From #table
Drop Table #table
結果:
心得:在加解密的過程當中,與非對稱金鑰的方式類似,也是一個高安全性的加解密方法,當然效能上也與非對稱金鑰相差不多...
參考:
CREATE CERTIFICATE (Transact-SQL)
DROP CERTIFICATE (Transact-SQL)
BACKUP CERTIFICATE (Transact-SQL)
SQL Server 憑證和非對稱金鑰
sys.certificates (Transact-SQL)
教學課程:使用憑證簽署預存程序
5.密碼片語加解密
Code:進行資料加密
ENCRYPTBYPASSPHRASE('張小呆', Convert(nvarchar(max), 身分證,
CONVERT(int, SUBSTRING('A891234567', 2, len('A891234567'))))) as '加密'
From dbo.使用者資料
結果:
Code:進行資料解密
f_使用者名稱 nvarchar(10),
f_身分證 char(10),
f_加密 varbinary(max)
);
Insert into #table
Select *,
ENCRYPTBYPASSPHRASE('張小呆', Convert(nvarchar(max), 身分證,
CONVERT(int, SUBSTRING('A891234567', 2, len('A891234567'))))) as '加密'
From dbo.使用者資料
--進行資料解密
Select *,
CONVERT(nvarchar(10), DECRYPTBYPASSPHRASE('張小呆', f_加密, CONVERT(int, SUBSTRING('A891234567', 2, len('A891234567'))))) as '解密'
From #table
Drop Table #table
結果:
心得:密碼片語加密方式比 Convert 方式要來的好,也是一般使用的加解密方式。
這五種加解密方式,是較常用的,該使用哪一個,就要看公司的資安政策了,若是使用 對稱加解密、非對稱加解密或憑證加解密,都要特別重視 備份 資料庫這項工作,以免發生重大的資安問題。