关于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、执行结果

到此这篇关于关于sql server加密与解密的问题的文章就介绍到这了,更多相关sql server加密与解密内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐