Sql server 内置函数实现md5加密

转自http://www.cnblogs.com/stone_w/archive/2012/05/22/2513581.html


Sql Server内置函数实现MD5加密

实例

MD5加密“123456”:

HashBytes('MD5','123456')

结果:0xE10ADC3949BA59ABBE56E057F20F883E (提示:看完最后,结果要进行转换。)

 

函数

函数 描述 返回值

HashBytes

 HashBytes ('加密方式', '待加密的值')
加密方式= MD2 | MD4 | MD5 | SHA | SHA1
返回值类型:varbinary(maximum 8000 bytes)

 

 

 

 

提示与注释

123456的MD5 有工具可知结果为:e10adc3949ba59abbe56e057f20f883e

HashBytes生成的结果为:0xE10ADC3949BA59ABBE56E057F20F883E,16进制的数值,去掉“0x”转换为小写值就完全与MD5值吻合了,在此需要用另一个函数(sys.fn_sqlvarbasetostr)把varbinary的值转换为varchar类型的,完整sql如下:

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

结果就是完整的MD5值:e10adc3949ba59abbe56e057f20f883e

 

对转自的一些说明

注意:HashBytes 函数的返回值的类型是varbinary 如果把结果存储在varchar 类型的字段里会乱码

所以需要进行类型转换 

转换函数为 sys.fn_VarBinToHexStr (这个函数是将二进制转换为16进制)

虽然为16进制 但是可以存储在varchar类型的字段里 不会乱码, 长度固定为34 位

例如下面代码

declare @password varchar(100)
set @password = sys.fn_VarBinToHexStr(HashBytes('md5','admin'))
select @password 

结果是0x21232f297a57a5a743894a0e4a801fc3 长度是34 位  

md5长度 应该是32位 上面的结果就多0x这个两位 表示16进行的符号



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值