1
、 Convert方式:
a)
USE
tempdb
b)
GO
c)
CREATE
TABLE
test
d) (
e) userID
INT
IDENTITY
(
1
,
1
) ,
f) userName
VARCHAR
(
10
) ,
g) userSalary
FLOAT
,
h) cyberalary
NVARCHAR
(
MAX
)
i) ) ;
j)
k)
INSERT
INTO
TEST
l) ( userName, userSalary )
m)
VALUES
(
'
taici
'
,
1234
),
n) (
'
hailong
'
,
3214
),
o) (
'
meiyuan
'
,
1111
)
p)
--
ALTER TABLE test
q)
--
ADD userNewSalary VARBINARY(512)
r)
--
使用转换函数把数据转换成varbinary,改变编码方式。
s)
SELECT
*
,
t)
CONVERT
(
VARBINARY
(
512
), userSalary)
u)
FROM
test
v)
--
把数据转换成int,可以恢复原有编码方式
w)
SELECT
*
,
x)
CONVERT
(
INT
, userSalary)
y)
FROM
test
2
、 对称密钥:
a)
--
创建对称密钥
b)
USE
AdventureWorks
c)
GO
d)
CREATE
SYMMETRIC
KEY
SymKey123
e)
WITH
ALGORITHM
=
TRIPLE_DES ENCRYPTION
BY
PASSWORD
=
'
P@ssw0rd
'
f)
GO
g)
--
注意事项:在启用时,需要先OPEN SYMMETRIC KEY 搭配密钥密码,否则所产生的数据都会是null值。而且需要搭配Key_GUID函数来使用
h)
--
打开对称密钥
i)
OPEN
SYMMETRIC
KEY
SymKey123 DECRYPTION
BY
PASSWORD
=
'
P@ssw0rd
'
;
j)
--
进行数据加密
k)
SELECT
*
,ENCRYPTBYKEY(KEY_GUID(
'
SymKey123
'
),
CONVERT
(
VARCHAR
(
max
),AddressLine1))
l)
FROM
Person.Address
m)
r)
--
把加密后数据更新到原来另外的列上
s)
UPDATE
Person.Address
t)
SET
AddressLine2
=
ENCRYPTBYKEY(KEY_GUID(
'
SymKey123
'
),
CONVERT
(
VARCHAR
(
max
),AddressLine1))
u)
--
解密:解密过程同样需要OPEN SYMMETRIC KEY ,且需要利用DECRYPTBYKEY 和CONVERT函数
v)
OPEN
SYMMETRIC
KEY
SymKey123 DECRYPTION
BY
PASSWORD
=
'
P@ssw0rd
'
;
w)
x)
SELECT
AddressID,
CONVERT
(
VARCHAR
(
MAX
) ,
CONVERT
(
VARCHAR
(
MAX
),DECRYPTBYKEY(AddressLine2)))
y)
FROM
Person.Address
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