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 |