SQL Server 敏感数据加密处理

项目安全审核过程中涉及到敏感信息加密的问题,收藏备用!

SQL Server中提供的两种不同的加密方式,可以分为两大类,对称(Symmetric)加密和非对称(Asymmetric)加密。

sqlserver 加密详细见 https://blog.csdn.net/zy_strive_2012/article/details/53519822

加密方法,例子见 https://www.cnblogs.com/guogangj/p/3365614.html

注意的是使用 sqlserver 加密,字段属性需要是varbinary

SQL Server的对称加密示例代码:

--创建一个对称密钥,其实只需要创建一次,不用每次都创建,这个对称密钥密码为123456(嗯,大多数人认为的密码),密码是nvarchar类型的
CREATE SYMMETRIC KEY my_symetric_key WITH ALGORITHM = DESX ENCRYPTION BY PASSWORD = N'123456';

--使用一个对称密钥前必须打开它,而且要提供创建它时所使用的密码,密码不对的话就会打开失败
OPEN SYMMETRIC KEY my_symetric_key DECRYPTION BY PASSWORD = N'123456';

--只能加密字符串,如果要加密数字,就用CONVERT函数先把数字转为字符串
DECLARE @strClearText NVARCHAR(100);
SET @strClearText = N'3000.00';

--密文类型为VARBINARY,用
DECLARE @strCipherText VARBINARY(MAX);
SET @strCipherText = EncryptByKey(Key_GUID('my_symetric_key'), @strClearText);

--显示密文(密文其实为二进制格式,你会看到其HEX文本)
SELECT @strCipherText AS [密文];

--解密不需要提供密钥名称,SQL Server会根据当前上下文去寻找打开的对称密钥
DECLARE @strDecrypted VARBINARY(MAX);
SET @strDecrypted = DecryptByKey(@strCipherText);

--显示出解密后的明文
SELECT Convert(NVARCHAR(100), @strDecrypted) AS [解密后的明文]

--关闭这个密钥
CLOSE SYMMETRIC KEY my_symetric_key;

--以后还需要用这个密钥的话就不用删掉它
DROP SYMMETRIC KEY my_symetric_key;

SQL Server的非对称加密示例代码:

--创建一个非对称密钥(不用每次都创建),这个对称密钥密码为123456,使用RSA512算法,另外还有RSA1024和RSA2048,强度更高,可加密内容更长,密钥生成速度也会慢不少,RSA512这里足够用了
CREATE ASYMMETRIC KEY my_asymetric_key WITH ALGORITHM = RSA_512 ENCRYPTION BY PASSWORD = N'123456';

DECLARE @strClearText NVARCHAR(100);
SET @strClearText = N'3000.00';

--加密,和对称加密不一样,不需要提供密码,也不需要打开密钥
DECLARE @strCipherText VARBINARY(MAX);
SET @strCipherText = EncryptByAsymKey(AsymKey_ID('my_asymetric_key'), @strClearText);

--显示密文
SELECT @strCipherText AS [密文];

--解密,必须提供生成密钥时候的密码,密码不正确的话就会出错
--密钥选择不正确的话会得到NULL结果
DECLARE @strDecrypted VARBINARY(MAX);
SET @strDecrypted = DecryptByAsymKey(AsymKey_ID('my_asymetric_key'), @strCipherText, N'123456');

--显示出解密后的明文
SELECT Convert(NVARCHAR(100), @strDecrypted) AS [解密后的明文]

--以后还需要用这个密钥的话就不用删掉它
DROP ASYMMETRIC KEY my_Asymetric_key;
--查看所有对称密钥
SELECT * FROM sys.symmetric_keys;

--查看所有非对称密钥
SELECT * FROM sys.asymmetric_keys;

例子:

--创建一个非对称密钥
CREATE ASYMMETRIC KEY salary_mgr_key
WITH ALGORITHM = RSA_512
ENCRYPTION BY PASSWORD = N'123456';

--加密
insert into table(id, value1) values('1', EncryptByAsymKey(AsymKey_ID('salary_mgr_key'), Convert(nvarchar(100),8000.00)), 0);

--解密
select id , Convert( nvarchar (100 ), DecryptByAsymKey (AsymKey_ID ( 'salary_mgr_key'), value1, N'123456'))as value1 from table

原文地址:https://www.cnblogs.com/start-fxw/p/9328187.html