不废话直接上代码
DECLARE @String VARCHAR(64)
Set @String = '1234'
select substring(sys.fn_sqlvarbasetostr(HashBytes('MD5',@String)),3,32) as T
select substring(sys.fn_sqlvarbasetostr(HashBytes( 'MD5', dbo.User.Pin)), 3, 32 ) AS PWD,dbo.User.Pin FROM dbo.CRDHLD
结果集:
![](https://i-blog.csdnimg.cn/blog_migrate/208d1f15b5692bb5f5a9cdab1dfef46d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/15acacdae088b30e2aee2c9962fc5671.png)
从两个结果集可以看到,变量@String和字段Pin的值,有多个相等,但出来的MD5值却不相同。
据我推测,出问题的原因是一个是用MD5算法直接作用在SQL 的变量上,另一个是作用的select出来的字段值上,但SQL的变量数据可能和select出来的字段值在内存表现上可能是不同的,因些才会导致最终的MD5值不同。
解决的方法是,统一数据加密码的来源,我现在用的方法是,从表中读取时就加密码,然后再传到SQL变量中,现在的结果是相同的。