Sql Server内置函数实现MD5加密

附加ORACLE  MD5加密备查:

select utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => '123456')) from dual;

SQL MD5加密:

复制代码
--MD5加密
--HashBytes ('加密方式', '待加密的值')
--加密方式= MD2 | MD4 | MD5 | SHA | SHA1    
--返回值类型:varbinary(maximum 8000 bytes)
select HashBytes('MD5','123456')
--HashBytes生成的结果为:0xE10ADC3949BA59ABBE56E057F20F883E

--一般工具生成的都是没有0x和是小写的,16进制的数值,去掉“0x”转换为小写值就完全与MD5值吻合了,
--在此需要用另一个函数(sys.fn_sqlvarbasetostr)把varbinary的值转换为varchar类型的,
select sys.fn_sqlvarbasetostr(HashBytes('MD5','123456'))
--结果:0xe10adc3949ba59abbe56e057f20f883e        截取去掉0x

select substring(sys.fn_sqlvarbasetostr(HashBytes('MD5','123456')),3,32)
--结果就是完整的MD5值:e10adc3949ba59abbe56e057f20f883e
复制代码

 在SQL Server 2005下自带的函数HashBytes() ,此函数是微软在SQL Server 2005中提供的,HashBytes() 函数的返回结果是VarBinary类型(以 0x 开头 16 进制形式的二进制数据)。通常情况下,我们需要的都是字符串型的数据,直接存入varchar字段类型的列或者nvarchar的列,就会出现乱码,需要类型转化

复制代码
--通用可以用convert替换sys.fn_sqlvarbasetostr
select CONVERT(VARCHAR(50),HashBytes('MD5','123456'),1)
--0xE10ADC3949BA59ABBE56E057F20F883E
--如果值不需要0x开头,可以设置 CONVERT() 的style参数为2
select CONVERT(VARCHAR(50),HashBytes('MD5','123456'),2)

--Convert()函数是Sql Server2008及以上版本支持,2008以下版本可以使用下面的方法:
--sys.fn_VarBinToHexStr() 或 sys.fn_sqlvarbasetostr() 函数转换也可以避免乱码,但是转换后的值带有0x开头,并且值为小写形式
select sys.fn_VarBinToHexStr(HashBytes('MD5','123456'))
--ps. SHA1算法结果为40位,MD5为32位或16位,根据实际长度截取。
--也可使用 fn_varbintohexsubstring() :
SELECT master.dbo.fn_varbintohexsubstring(0,HashBytes('MD5','123456'),1,0)    
--e10adc3949ba59abbe56e057f20f883e
--fn_SqlVarBaseToStr() 第1个参数表示是否保留0x前缀,1为保留,0为不保留。fn_VarBinToHexStr()内部调用的就是fn_SqlVarBaseToStr(),且第1个参数传的1。
复制代码

 

复制代码
--变量类型不同,得到的加密结果也不同
declare @a1 nvarchar(20)
set @a1='123456'
select HashBytes('MD5',@a1)
--0xCE0BFD15059B68D67688884D7A3D3E8C

declare @a2 nvarchar(10)
set @a2='123456'
select HashBytes('MD5',@a2)
--0xCE0BFD15059B68D67688884D7A3D3E8C

declare @a3 varchar(20)
set @a3='123456'
select HashBytes('MD5',@a3)
--0xE10ADC3949BA59ABBE56E057F20F883E
复制代码
转自:https://www.cnblogs.com/JuneZhang/p/6396896.html?utm_source=itdadao&utm_medium=referral
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值