这里用到SQL Server内置的函数 HashBytes().

select HashBytes('MD5','bubu')

select HashBytes('SHA1','bubu')

 

以MD5为例,‘bubu’加密之后的MD5应是

[小问题笔记(五)] 用SQL加密字符串(MD5、SHA1),顺便解决读取数据加密后不一样的问题

用刚才的SQL查询结果是:

[小问题笔记(五)] 用SQL加密字符串(MD5、SHA1),顺便解决读取数据加密后不一样的问题

返回结果是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’

结果:

[小问题笔记(五)] 用SQL加密字符串(MD5、SHA1),顺便解决读取数据加密后不一样的问题

这是由于[name]字段的类型是nvarchar导致的,所以在加密前需要强制转化一下类型:

select substring(sys.fn_sqlvarbasetostr(HashBytes('MD5',CAST([name] as varchar(50)))),3,32) from Agent  where id=1  


这样就妥妥的了~

 

相关文章:

  • 2022-01-07
  • 2022-12-23
  • 2022-01-23
  • 2022-12-23
  • 2022-01-07
  • 2022-01-07
  • 2021-06-24
  • 2022-12-23
猜你喜欢
  • 2021-11-13
  • 2021-06-13
  • 2022-12-23
  • 2022-12-23
  • 2021-12-31
  • 2021-10-05
相关资源
相似解决方案