zoukankan      html  css  js  c++  java
  • SQL Server加密与解密

    一、PassPhrase加密

    1.1、概要简述

    1)对于不涉及证书及密钥的应急的数据加密,可以直接基于用户提供的密码来加密和解密数据。

    2)通行短语(PassPhrase)是允许存在空格的密码。这个PassPhrase不会存储在数据库中,因而也就意味着不会被使用存储的系统数据"破解"。同时,可以使用空格创建一个长的、易于记忆的句子来加密和解密敏感数据。

    3)PassPhrase支持的数据列类型有nvarchar、varchar、nchar、char、varbinary、binary。

    1.2、加密函数

    CREATE FUNCTION dbo.EncryptPass(@EnPass VARCHAR(32))
        RETURNS VARBINARY(MAX)
    AS  
    BEGIN
        DECLARE @Result VARBINARY(MAX)
        SET @Result=EncryptByPassPhrase('HelloWorld',@EnPass)
        RETURN @Result
    END

    1.3、解密函数

    CREATE FUNCTION dbo.DecryptPass(@DePass VARBINARY(MAX))
        RETURNS VARCHAR(32)
    AS  
    BEGIN 
        DECLARE @Result VARCHAR(32)
        SET @Result=CONVERT(VARCHAR,DecryptByPassPhrase('HelloWorld',@DePass))
        RETURN @Result
    END

    1.4、结果测试

    SELECT dbo.EncryptPass('测试字符串') AS RESULT
    SELECT dbo.DecryptPass(0x0100000045FE8873D07BFB747D33D81D1C1E06CA3EC10D718CF603E395D4493BFBFC5683) AS RESULT
    SELECT dbo.DecryptPass(dbo.EncryptPass('测试字符串')) AS RESULT

    1.5、执行结果

    二、证书加密

    2.1、概要简述

    1)证书可以在数据库中加密和解密数据。

    2)证书包含密钥对、证书拥有者的信息、证书可用的开始和结束过期日期,同时还包含公钥和密钥,前者用来加密,后者用来解密。

    3)SQL Server可以生成它自己的证书,也可以从外部文件或程序集载入。证书比非对称密钥更易于移植,可以在数据库中很方便地重用。

    2.2、创建证书

    CREATE CERTIFICATE TestCert
    ENCRYPTION BY PASSWORD='HelloWorld'
    WITH SUBJECT='Hello World', START_DATE='2021-01-20', EXPIRY_DATE='2021-12-31'

    2.3、加密函数

    CREATE FUNCTION dbo.EncryptCert(@EnPass VARCHAR(32))
        RETURNS VARBINARY(MAX)
    AS  
    BEGIN
        DECLARE @Result VARBINARY(MAX)
        SET @Result=EncryptByCert(Cert_ID('TestCert'),@EnPass)
        RETURN @Result
    END

    2.4、解密函数

    CREATE FUNCTION dbo.DecryptCert(@DePass VARBINARY(MAX))
        RETURNS VARCHAR(32)
    AS  
    BEGIN 
        DECLARE @Result VARCHAR(32)
        SET @Result=CONVERT(VARCHAR,DECRYPTBYCERT(Cert_ID('TestCert'),@DePass,N'HelloWorld'))
        RETURN @Result
    END

    2.5、结果测试

    SELECT dbo.EncryptCert('测试字符串') AS RESULT
    SELECT dbo.DecryptCert(0x836021834D8D25E4DAD0CD26767A77A7FFF9CE9BDCA7BDE72E418118DB58DFB8AF6325B7A9D1D6C2D5D43800120A5C5D212BC4A645D10A065A147C5E97B419DAF6DC203598E376AE4A520B45D145F2C2A6BAE23B49AD3EA45BDAAC1FBD78E8402195DDA0842CA5A89942D03C5D7B82F7E8241D8BD698115C78CEBD5AC0066C6C) AS RESULT
    SELECT dbo.DecryptCert(dbo.EncryptCert('测试字符串')) AS RESULT

    2.6、执行结果

  • 相关阅读:
    java 实现Queue
    java 实现stack
    为什么现货白银/现货原油的报价每个交易所都不一样?
    现货交易入门之常用术语
    现货操盘手精髓语录
    现货电子交易中实物交割的概念和作用?
    关于ios对rtsp格式的流媒体支持的一些官方说明
    ProgressBar的Indeterminate属性
    安卓适配问题
    推送原理
  • 原文地址:https://www.cnblogs.com/atomy/p/14302326.html
Copyright © 2011-2022 走看看