不废话直接上代码
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
结果集:


从两个结果集可以看到,变量@String和字段Pin的值,有多个相等,但出来的MD5值却不相同。
据我推测,出问题的原因是一个是用MD5算法直接作用在SQL 的变量上,另一个是作用的select出来的字段值上,但SQL的变量数据可能和select出来的字段值在内存表现上可能是不同的,因些才会导致最终的MD5值不同。
解决的方法是,统一数据加密码的来源,我现在用的方法是,从表中读取时就加密码,然后再传到SQL变量中,现在的结果是相同的。
本文通过实例演示了在SQL Server中使用MD5算法对不同数据源进行哈希运算时可能出现的不一致现象,并探讨了解决方案。作者发现,直接对SQL变量和从表中SELECT出的字段值应用MD5可能会因为数据在内存中的表现形式不同而产生不同的结果。为确保一致性,建议统一数据源,即在读取表中数据时即进行哈希处理。
1490

被折叠的 条评论
为什么被折叠?



