• 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

  • 相关阅读:
    闰年的定义
    Sublime Text 3
    维特比算法(Viterbi)
    索引
    倒排索引
    URL过滤
    判断一个元素是否在集合中
    布隆过滤器
    jsp九大内置对象
    jsp九大内置对象和其作用详解
  • 原文地址:https://www.cnblogs.com/start-fxw/p/9328187.html
Copyright © 2020-2023  润新知