zoukankan      html  css  js  c++  java
  • 总结Sql Server内置函数实现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
  • 相关阅读:
    【作业】5个不合理的Xaml Control
    记录一下 mysql 的查询中like字段的用法
    BaseDao代码,用于连接数据库实行增删改查等操作
    Java的多态
    Java基础一
    数据库的设计
    JavaScript基础
    我注册博客的第一天
    JAVA异常处理流程理解
    javaweb中解决中文乱码问题
  • 原文地址:https://www.cnblogs.com/JuneZhang/p/6396896.html
Copyright © 2011-2022 走看看