首先谈一下自己的理解,密钥我们都知道是对我们所知道的某一个事物进行加密。先讲一下对称性密钥,如果我们对一个数据库中的一个表的某些元素进行加密的时候,所用的加密密码和解密的密码是一致的,而非对称性密钥则刚好是相反的。
我们具体看下怎样对一个我们想要加密的表数据进行加密和解密。
1、加密一个数据库中的表的信息
2、建master Key:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'p@ssw0rd';
用于加密数据库主密钥的密码
数据库主密钥是指用于保护证书私钥的对称密钥以及数据库中存在的非对称密钥。 当创建主密钥时,会使用 AES_256 算法以及用户提供的密码对其进行加密。 在 SQL Server 2008 和 SQL Server 2008 R2 中,不使用 Triple DES 算法。 若要启用主密钥的自动解密功能,将使用服务主密钥对该主密钥的副本进行加密,并将副本存储在数据库和 master 中。 通常,每当主密钥更改时,便会在不进行提示的情况下更新存储在 master 中的副本。 可以使用 ALTER MASTER KEY 的 DROP ENCRYPTION BY SERVICE MASTER KEY 选项对该默认行为进行更改。 必须使用 OPEN MASTER KEY 语句和密码打开未使用服务主密钥进行加密的主密钥。
master 中 sys.databases 目录视图的 is_master_key_encrypted_by_server 列指示是否使用服务主密钥对数据库主密钥进行加密。
可以在 sys.symmetric_keys 目录视图中查看有关数据库主密钥的信息。
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是有效时间,要大于当前时间
这样创建之后我们看到相应的加密数据将会是乱码!
通过这个例子你可以很好的去理解关于加密的概念