zoukankan      html  css  js  c++  java
  • sql中几个数据加密的方法

    IF OBJECT_ID('test') IS  NOT NULL DROP TABLE dbo.test
    go
    --创建测试表
    CREATE TABLE test ( userid INT IDENTITY(1,1),userName VARCHAR(10),userPassword  VARCHAR(20),EncryptPwd VARCHAR(max))
    --测试数据
    INSERT INTO dbo.test
    SELECT '张三','123456',NULL  UNION ALL
    SELECT '李四','312432',NULL  UNION ALL
    SELECT '王五','4fds56',NULL
    --1.通过Convert改变编码方式,变为varbinary(可变长的二进制数据),不具备数据保护能力
    SELECT userid,userName,CONVERT(VARBINARY(max),userpassword) FROM dbo.test
    /*
    userid      userName   
    ----------- ---------- -----------------------
    1           张三         0x313233343536
    2           李四         0x313233343536
    3           王五         0x313233343536
    
    (3 行受影响)
    */
    --1.对称密钥:利用EncryptByKey函数进行加密,DecryptByKey函数进行解密,比较适合大量数据
    /*
    各个参数的详情Sql server 帮助文档
    可以在sys.symmetric_keys目录视图中查看对称密钥的有关信息
    select * from sys.symmetric_keys
    
    */
    --创建对称密钥
    CREATE SYMMETRIC KEY SymKey
    WITH ALGORITHM=TRIPLE_DES --TRIPLE_DES具有128位的密钥的算法
    ENCRYPTION BY 
    PASSWORD='P@ssw0rd' --用来保护密钥的密码,password 必须符合运行 SQL Server 实例的计算机的密码策略要求。应始终使用强密码
    go
    --注意事项:在启用时,需要先OPEN SYMMETRIC KEY 搭配密钥密码,否则所产生的数据都会是null值。而且需要搭配Key_GUID函数来使用
    --打开对称密钥
    OPEN SYMMETRIC KEY SymKey DECRYPTION BY PASSWORD='P@ssw0rd'
    --进行数据加密
    SELECT *,ENCRYPTBYKEY(KEY_GUID('SymKey'),CONVERT(VARCHAR(max),userPassword)) AS newPwd FROM dbo.test
    --把加密后的数据更新到另外一列上
    UPDATE dbo.test  SET EncryptPwd=ENCRYPTBYKEY(KEY_GUID('SymKey'),CONVERT(VARCHAR(max),userPassword))
    --加密后的结果
    /*
    userid      userName   userPassword         加密后的密码
    ----------- ---------- -------------------- ------------------------------------------------
    1           张三         123456                簜?-J价?Q/御   誚A(?-d?9r?螈nrR?            
    2           李四         123456                簜?-J价?Q/御   ??獁D?p.g?倘x錷Y?             
    3           王五         123456                簜?-J价?Q/御   櫟伥q@滟?&[绠鱒f@肱             
    
    (3 行受影响)
    */
    --解密
    OPEN SYMMETRIC KEY SymKey DECRYPTION BY PASSWORD='P@ssw0rd'
    SELECT *,CONVERT(VARCHAR(max),CONVERT(VARCHAR(MAX),DECRYPTBYKEY(EncryptPwd))) AS 解密后的密码 
    FROM dbo.test 
    /*
    userid      userName   userPassword         EncryptPwd                                          解密后的密码
    ----------- ---------- -------------------- --------------------------------------------------------------------------------
    1           张三         123456                簜?-J价?Q/御   誚A(?-d?9r?螈nrR?            123456
    2           李四         123456                簜?-J价?Q/御   ??獁D?p.g?倘x錷Y?              123456
    3           王五         123456                簜?-J价?Q/御   櫟伥q@滟?&[绠鱒f@肱         123456
    
    (3 行受影响)
    */
    --2.非对称密钥:非对称密钥使用两种不同的密钥,所以加密是是不需要输入密码验证,但解密时就需要
    --详情Sql server 帮助文档
    go
    CREATE ASYMMETRIC KEY AsyKey
    WITH Algorithm=RSA_2048 ENCRYPTION BY PASSWORD='P@ssw0rd'
    GO
    --添加一列,用来存储非对称密钥加密后的数据
    ALTER TABLE dbo.test
    ADD EncryptByAsyKey VARCHAR(512)
    GO
    --进行加密
    SELECT *,ENCRYPTBYASYMKEY(ASYMKEY_ID('AsyKey'),CONVERT(VARCHAR(max),userPassword))
    FROM dbo.test
    go
    --把数据更新到一个新列
    UPDATE dbo.test SET EncryptByAsyKey=ENCRYPTBYASYMKEY(ASYMKEY_ID('AsyKey'),CONVERT(VARCHAR(max),userPassword))
    go
    --进行解密
    SELECT userid,userName,EncryptByAsyKey,
    CONVERT(VARCHAR(max),CONVERT(VARCHAR(MAX),DECRYPTBYASYMKEY(ASYMKEY_ID('AsyKey'),EncryptByAsyKey,N'P@ssw0rd'))) AS 解密后的密码
    FROM dbo.test

    --3.证书加密:一个数据库级安全对象,创建方式有A. 创建自我签名的证书B. 通过文件创建证书C. 通过已签名的可执行文件创建证书
    --详情参考Sql server 技术文档
    --建立证书
    CREATE CERTIFICATE certKey				--证书名
    ENCRYPTION BY PASSWORD='P@ssw0rd'		--证书密码
    WITH SUBJECT='Password certificate',	--证书描述	
    START_DATE= '2012/06/25',				--证书生效期
    EXPIRY_DATE= '2013/06/25';				--证书截至期
    GO
    --添加一列,用来存储利用证书加密后的密码
    ALTER TABLE dbo.test 
    ADD EncryptByCerkey VARCHAR(max)
    --利用证书加密
    SELECT *,ENCRYPTBYCERT(CERT_ID('certKey'),CONVERT(VARCHAR(max),userpassword)) 
    FROM dbo.test
    UPDATE dbo.test SET EncryptByCerkey=ENCRYPTBYCERT(CERT_ID('certKey'),CONVERT(VARCHAR(max),userpassword))
    SELECT * FROM dbo.test
    --解密
    SELECT userid,username,EncryptByCerkey,
    CONVERT(VARCHAR(max),DECRYPTBYCERT(CERT_ID('certKey'),EncryptByCerkey,N'P@ssw0rd')) AS 解密后的密码
    FROM dbo.test

    --5.短语加密
    --该过程较为简单,只需要使用EncryptByPassPhrase函数,使用短语加密时,参考的数据航不可以变动,否则解密失败。
    --添加一列用来存储短语加密后的密码
    ALTER TABLE dbo.test
    ADD EncryptByPass VARCHAR(MAX)
    go
    --进行加密
    SELECT *,ENCRYPTBYPASSPHRASE(N'P@ssw0rd',CONVERT(VARBINARY,userpassword),userid)
    FROM dbo.test
    UPDATE dbo.test SET EncryptByPass=ENCRYPTBYPASSPHRASE(N'P@ssw0rd',CONVERT(VARBINARY,userpassword),userid)
    SELECT * FROM dbo.test
    --解密
    SELECT userid,userName,EncryptByPass,
    CONVERT(VARCHAR(max),DECRYPTBYPASSPHRASE(N'P@ssw0rd',EncryptByPass,userid)) AS 解密后的密码
    FROM dbo.test

  • 相关阅读:
    hdu1814 Peaceful Commission 2-SAT
    上传下载文件
    文件下载类
    文件操作类
    MD5加密帮助类
    加密解密类
    发送邮件函数
    DataTable 分页
    服务器缓存帮助类
    Cookie帮助类
  • 原文地址:https://www.cnblogs.com/hailiang2013/p/2846422.html
Copyright © 2011-2022 走看看