从Sql Server 2008开始,MSSQL(Sql Server)提供了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)) 综上操作,我们使用Sql Server内置函数对一个字符串进行MD5加密就完成了。
打印
|