SQLServer对称密钥

本文详细介绍了SQL中加密和解密数据的过程,包括创建密钥、建立表并插入加密数据,以及如何使用不同方法解密数据。同时强调了在保护调用者利益的情况下开打密钥的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、建库:Test 
 USE Test;

2、建master Key: 
 CREATE MASTER KEY ENCRYPTION BY PASSWORD =
'p@ssw0rd';

3、建表:Person 
 CREATE TABLE Person
 (
 ContactID INT PRIMARY KEY,
 FirstName NVARCHAR(200),
 MiddleName NVARCHAR(200),
 LastName NVARCHAR(200),
 eFirstName VARBINARY(200),
 eMiddleName VARBINARY(200),
 eLastName VARBINARY(200),
 );

4、建证书: 
 CREATE CERTIFICATE TestCertificate
 WITH SUBJECT = 'Adventureworks Test Certificate',EXPIRY_DATE = '10/10/2009';

5、建对称key 
 CREATE SYMMETRIC KEY
TestSymmetricKey
 WITH ALGORITHM = TRIPLE_DES
 ENCRYPTION BY CERTIFICATE
TestCertificate;
 OPEN SYMMETRIC KEY TestSymmetricKey
 DECRYPTION BY CERTIFICATE TestCertificate;

6、向表Person中插入加密的数据 
 INSERT
 INTO Person (ContactID, eFirstName, eMiddleName, eLastName)
 values(1,
 
EncryptByKey(Key_GUID('TestSymmetricKey'), 'eFirstName'),
 EncryptByKey(Key_GUID('TestSymmetricKey'), 'eMiddleName'),
 EncryptByKey(Key_GUID('TestSymmetricKey'), 'eLastName')
 )

7、解密6中的数据 
 UPDATE Person
 SET FirstName = CONVERT(varchar,
DecryptByKey(eFirstName)),
 MiddleName = CONVERT(varchar,DecryptByKey(eMiddleName)),
 LastName = CONVERT(varchar,DecryptByKey(eLastName));

8、查看解密后的结果 
 select Cast(DecryptByKey(eFirstName) as
Varchar) FROM Person

9、删除以上的结构 
 DROP TABLE Person;
 CLOSE SYMMETRIC KEY TestSymmetricKey;
 DROP SYMMETRIC KEY TestSymmetricKey;
 DROP CERTIFICATE TestCertificate;
 DROP MASTER KEY;

PS:EXPIRY_DATE是有效时间,要大于当前时间

解密时的数据类型要和DB中对应字段的类型相同,要不就是乱码哦(千辛万苦找出来的)

 

Ø  如何在保护调用者利益的情况下开打密钥:如果可能,尽量用DecryptByKeyAuto语句代替DecryptByKey语句,使用DecryptByKeyAuto不需要显示地将密钥打开,该语句会自动打开密钥(并在解密后关闭密钥,译者注)

Ø  尽可能减少打开密钥和关闭密钥之间的代码,减少打开密钥却没有关闭密钥的逻辑错误

Ø  确保在代码内进行错误处理,使用TRY/CATCH防止模块过早终止

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值