这里用到SQL Server内置的函数 HashBytes().
select HashBytes('MD5','bubu') select HashBytes('SHA1','bubu')
以MD5为例,‘bubu’加密之后的MD5应是
用刚才的SQL查询结果是:
返回结果是VarBinary类型(以 0x 开头 16 进制形式的二进制数据)。我们一般都需要的是VarChar,用CAST或Convert转会乱码,变成这种鸟样---》 幐??�?�iる
正确的办法,是使用下列函数:
select sys.fn_sqlvarbasetostr(HashBytes('MD5','bubu'))
不想要0x的话就截一下好啦:
select substring(sys.fn_sqlvarbasetostr(HashBytes('MD5','bubu')),3,32)
补充:
简单的加密字符串,当然很容易得到想要的结果。如果是从数据库里读取的数据,就有可能不一样的结果了。
select substring(sys.fn_sqlvarbasetostr(HashBytes('MD5','bubu')),3,32) select substring(sys.fn_sqlvarbasetostr(HashBytes('MD5',[name])),3,32) from Agent where id=1 --读取结果为‘bubu’
结果:
这是由于[name]字段的类型是nvarchar导致的,所以在加密前需要强制转化一下类型:
select substring(sys.fn_sqlvarbasetostr(HashBytes('MD5',CAST([name] as varchar(50)))),3,32) from Agent where id=1
这样就妥妥的了~