sqlserver进⾏MD5加密
官⽅定义函数:
HashBytes ( '<algorithm>', { @input | 'input' } )
<algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1
参数解释:
algorithm:标识⽤于对输⼊执⾏哈希操作的哈希算法。这是必选参数,⽆默认值。需要使⽤单引号。
@input : 数据类型为 varchar、nvarchar 或 varbinary
'input' :字符串数据
返回值:
varbinary (最⼤8000字节)
备注:允许的输⼊值限制为 8000 个字节。输出符合算法标准:MD2、MD4 和 MD5 为 128 位(即 16 个字节);SHA 和 SHA1 为 160 位(即 20 个字节)
⼀:⽰例MD5加密:
⼀个完整的写法:
PRINT    LOWER(RIGHT(sys.fn_varbintohexstr(HASHBYTES('MD5','这个字符串需要加密')),32))  >>
8926206f9ebb0bee4bbb0724fccb4410
下⾯逐步拆分
1.先⽤HashBytes函数看看⽣成的结果
PRINT HASHBYTES('MD5','这个字符串需要加密')  >>  0x8926206F9EBB0BEE4BBB0724FCCB4410
由于该函数返回的值是⼆进制varbinary 数据,不是字符串不能直接使⽤,所以要将其转换为字符串
2.⽤sys.fn_varbintohexstr(@pbinin)
@pbinin : varbinary (max) 数据类型
返回:nvarchar 数据类型
PRINT sys.fn_varbintohexstr(HASHBYTES('MD5','这个字符串需要加密'))  >>  0x8926206f9ebb0bee4bbb0724fccb4410
3.如何得到32位的MD5值,貌似最⼤也就只能到32位,使⽤ Right 函数进⾏截取
PRINT RIGHT(sys.fn_varbintohexstr(HASHBYTES('MD5','这个字符串需要加密')),32) >> 8926206f9ebb0bee4bbb0724fccb4410
函数定义
RIGHT ( character_expression , integer_expression )
参数:
character_expression :可为字符或⼆进制数据表达式,常量,变量,列,任何能隐式转换为varchar或nvarchar的数据类型(text,ntext需要进⾏显⽰转换)字符串截取 sql
integer_expression :正整数,将返回的字符数
返回值:character_expression 若为⾮Unicode 返回 varchar , 若为unicode 则返回nvarchar
4.如果需要统⼀⼤⼩写可使⽤  lower(character_expression )  , upper(character_expression ) 进⾏转换
⼆:关于MD5加密的字符编码问题
先来⼏段对⽐
1. 字符 “è”
SQLServer :C05FC85230C60ED8FECB3670E77E603D 结果:与C# gb2312对应
2. 字符 “这是汉字”
SQLServer : E8C9AB48B603F81B87F4ED4F1005BB6E 结果:与C# gb2312对应
3. 字符 “123456”
SQLServer : E10ADC3949BA59ABBE56E057F20F883E 结果:与C# gb2312,utf-8 , utf-7 , ascii  对应
4.字符 “pxs123”
SQLServer : 684D95499489435C9351EFCDD68B25F2结果:与C# gb2312,utf-8 , utf-7 , ascii  对应
4.字符 “pxs!@#.”
SQLServer :FC05D7826726E773E993BDCA88F6B181结果:与C# gb2312,utf-8 , ascii  对应
5.字符英⽂符号“!@#.&*)|_;“
SQLServer :4C782D772102482D09696D11BDE1A02A 结果:与C# gb2312,utf-8 , ascii  对应
6.字符中⽂英混合符号“《!)*、“
SQLServer :1A891B7B5B3285925E2783694C2A367C 结果:与C# gb2312对应
6.字符中⽂英混合符号“汉字hanzi“
SQLServer :49212C24BDB2FA254880119A332F86D6
结果:与C# gb2312对应
8.字符 “プログラミン“
SQLServer :045B556A9CF5F0FE92EC7A7C9B3F66CA
结果:与C# gb2312对应
综上对⽐:
sqlserver中md5加密函数,字符存在⾮英⽂字符会按照gb2312⽅式编码计算出加密值,那么C#,JS等计算MD5加密值是就需要转为gb2312编码,才能得出⼀样的结果。
若为都为英⽂字符时,⽤utf-8编辑即可

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。