3、非对称密钥:


a) --非对称密钥使用两种不同的密钥,所以加密是是不需要输入密码验证,但解密时需要
b) USE AdventureWorks
c) GO
d) CREATE ASYMMETRIC KEY AsymKey123 WITH ALGORITHM=RSA_2048 ENCRYPTION BY PASSWORD='P@ssw0rd'
e) GO
f)
g) --添加新列存储加密后的数据
h) ALTER TABLE Person.Address ADD  AddressLine3 nvarchar(MAX)
i) GO
j) --进行加密
k) SELECT *,ENCRYPTBYASYMKEY(ASYMKEY_ID ('AsymKey123'),CONVERT(VARCHAR(MAX ),AddressLine1))
l) FROM Person.Address
m) GO
n)
o) --把数据更新到一个新列
p) UPDATE Person.Address
q) SET AddressLine3=ENCRYPTBYASYMKEY(ASYMKEY_ID ('AsymKey123'),CONVERT(VARCHAR(MAX ),AddressLine1))
r)
s)
t) SELECT *--addressline3
u) FROM Person.Address
v)
w) --解密:此过程一定要使用密码来解密,此处的类型要与加密时相同,比如加密时用varchar,而这里用nvarchar的话是解密不了的。
x) SELECT TOP 10 AddressID,CONVERT(VARCHAR(MAX),CONVERT (VARCHAR(MAX ),DECRYPTBYASYMKEY(ASYMKEY_ID('AsymKey123'),AddressLine3,N'P@ssw0rd'))) AS Decryptedata
y) FROM Person.Address


  4、证书加密:


a) --证书加密:首先建立证书(certificate)
b) CREATE CERTIFICATE certKey123--证书名
c) ENCRYPTION BY PASSWORD='P@ssw0rd'--密码
d) WITH SUBJECT='Address Certificate',--证书描述
e) START_DATE='2012/06/18',--证书生效日期
f) EXPIRY_DATE='2013/06/18' ;--证书到期日
g) GO
h) --利用证书加密
i) SELECT *,ENCRYPTBYCERT(CERT_ID('certKey123'),CONVERT (VARCHAR(MAX ),AddressLine1)) cyberAddress
j) FROM Person.Address
k) 
l) --添加新列存放加密数据
m) ALTER TABLE Person.Address ADD AddressLine4 Nvarchar(MAX )
n)
o) --把加密后数据放到新列
p) UPDATE Person.Address
q) SET AddressLine4=ENCRYPTBYCERT(CERT_ID('certKey123'),CONVERT (VARCHAR(MAX ),AddressLine1))
r)
s) --解密
t) SELECT AddressID,CONVERT(VARCHAR(MAX ),CONVERT(VARCHAR(MAX ),DECRYPTBYCERT(CERT_ID('certKey123'),AddressLine4,N'P@ssw0rd'))) DecryAddress
u) FROM Person.Address


  5、短语加密:


a) --短语加密:该过程较为简单,只需要使用EncryptByPassPhrase函数,使用短语加密时,参考的数据航不可以变动,否则解密失败。
b) SELECT *,AddressLine5=ENCRYPTBYPASSPHRASE('P@ssw0rd',CONVERT(varbinary,AddressLine1),AddressID)
c) FROM Person.Address
d)
e) --添加新列存放数据,注意,ENCRYPTBYPASSPHRASE函数返回的是VARBINARY类型
f) ALTER TABLE Person.Address ADD AddressLine5 VARBINARY(256)
g)
h) --将数据更新,过程中使用P@ssw0rd和AddressID数据行当成密码短语
i)
j) UPDATE Person.Address
k) SET AddressLine5=ENCRYPTBYPASSPHRASE('P@ssw0rd',CONVERT(varbinary,AddressLine1),AddressID)
l)
m) SELECT * FROM Person.Address