SqlServer内置函数实现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
字符串截取 sqlselect 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加密就完成了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论