项目安全审核过程中涉及到敏感信息加密的问题,收藏备用!
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