怎么实现对SQL Server数据库的字段进行加密和解密

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么实现对SQL Server数据库的字段进行加密和解密相关的知识,希望对你有一定的参考价值。

将那个字段设为主键
------解决方案--------------------------------------------------------
要不然
你只能在逻辑上做判断、先查询数据是否有当前的符号、如果有
就另填。没有的话,就插入
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
要是这个字段不是外键的话,可以设成主键,否则,可以由数据库的标识字段做主键,给这一列
加上唯一约束
------解决方案--------------------------------------------------------
主键或者unique
约束(这个oracle
有,不知sqlserver
有没有)。
这个好像不行吧。
------解决方案--------------------------------------------------------
设主键。用sequence
自增。设置主键
然后也可以写触发器做判断修改
参考技术A 怎么实现对SQL
Server数据库的字段进行加密和解密
那你可以通过编程
在保存的时候,先把字段内容进得加密,然后再保存到数据库中。
读取的时候,读出数据后,再进行解密操作。

Sql Server内置函数实现MD5加密

从Sql2008开始,MSSQL提供了hashbytes函数,该函数可以对字符串进行MD2、MD4、MD5、SHA、SHA1、SHA2_256、SHA2_512七种算法的加密

1.使用hashbytes函数进行加密的语法格式:

HASHBYTES ( \'算法\', expression)

第一个参数就是使用单引号包裹起来的算法名称,这个名字可以以下七种方式中的任何一种:

MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512

第二个参数就是将要被加密的字符串表达式,可以是常量、变量、表达式或字段等。

--例如:密码是 123456

select HashBytes(\'MD5\',\'123456\')

输出:0xE10ADC3949BA59ABBE56E057F20F883E

返回值是一个最大8000长度的varbinary。没错,返回值是varbinary,并不是直接的字符串

我们想要的结果,是MD5加密后的字符串,但hashbytes返回的是varbinary,这倒是没关系,有一个系统函数sys.fn_sqlvarbasetostr是专门用来将varbinary转为varchar的,当然您可以使用其它方式转换,既然MSSQL提供了直接转换的函数

 

2.使用sys.fn_sqlvarbasetostr函数转换的语法格式:

sys.fn_sqlvarbasetostr(varbinary)

参数就是varbinary类型的表达式了,返回值则就是varchar类型的字符串。

--例如:密码是 123456 的MD5转换为 Varchar 类型

select sys.fn_sqlvarbasetostr(HashBytes(\'MD5\',\'123456\'))

输出:0xe10adc3949ba59abbe56e057f20f883e

结果,是varbinary转换为varchar类型,大写也变成了小写,但加密的数值前面两位0x并不是MD5加密后的结果部分,我们还需要使用截取函数将它去掉,获得完整MD5加密结果,

函数中有两个都可以实现该功能,一个就是substring、另一个则是stuff。

 

3.1使用 Substring函数截取的语法格式

 SUBSTRING(expression,start,length)

第一参数就是字符串表达式,可以是常量、变量、表达式或字段等

第二个参数是截取的开始位数

第三个参数是截取的长度位数

--例如:密码是 123456 的MD5转换为 Varchar 类型,并从第3位开始截取出32位字符

select SUBSTRING( sys.fn_sqlvarbasetostr(HashBytes(\'MD5\',\'123456\')),3,32)

输出:e10adc3949ba59abbe56e057f20f883e

 

3.2 使用Stuff函数截取的语法格式使用stuff等于是把前两位挖掉填入空字符串

STUFF(expression,start,length,replace)

第一参数就是字符串表达式,可以是常量、变量、表达式或字段等

第二个参数是截取的开始位数

第三个参数是截取的长度位数

第四个参数是替换的字符串内容

--例如:密码是 123456 的MD5转换为 Varchar 类型,并从第1位开始截取到2位字符替换成空格(space(0) 里面的0 表示没有空格,如是其他数值则表示增加对应数值的空格替换

select Stuff( sys.fn_sqlvarbasetostr(HashBytes(\'MD5\',\'123456\')),1,2,SPACE(2))

 

综上操作,我们如果要对一个字符串进行MD5加密就完成了。

 

以上是关于怎么实现对SQL Server数据库的字段进行加密和解密的主要内容,如果未能解决你的问题,请参考以下文章

数据库大师成长日记:SQL Server如何防止开发人员获取敏感数据

数据库如何实现字段加密

delphi中如何实现对sql数据库记录进行添加,删除,修改

加密 SQL Server CE 数据库

Sql Server内置函数实现MD5加密

angularJS结合C#怎么对sqlserver数据库中的数据进行增删改查