我尝试在某个值上计算md5哈希,但是得到了一个奇怪的结果。
我以两种不同的方式运行它:
SELECT HASHBYTES('md5',ZLA_PASSWORD),ZLA_PASSWORD, len(ZLA_PASSWORD) FROM ZLA_PASSWORD;
SELECT HASHBYTES('md5', '123456');
我得到两个不同的结果,其中只有第二个有效:
0xCE0BFD15059B68D67688884D7A3D3E8C 123456 6
0xE10ADC3949BA59ABBE56E057F20F883E
这是在SQL Server 2005上完成的。
在123456上检查MD5的结果与在线检查第二个结果相同。
有什么想法吗?
谢谢!
答案 0 :(得分:6)
您有不同的数据类型
declare @str1 as varchar(10)
declare @str2 as nvarchar(10)
set @str1 = '123456'
set @str2 = '123456'
select
hashbytes('md5', @str1) as 'varchar',
hashbytes('md5', @str2) as 'nvarchar'
结果
varchar nvarchar
0xE10ADC3949BA59ABBE56E057F20F883E 0xCE0BFD15059B68D67688884D7A3D3E8C
答案 1 :(得分:1)
LEN在返回(修剪后的字符串)长度之前修剪内容。
您的密码字段很可能是一个CHAR字段,并且在那里有空格。
在散列之前尝试执行RTRIM:
SELECT HASHBYTES('md5',RTRIM(ZLA_PASSWORD))
答案 2 :(得分:1)
更确切地说,这应解决问题:
SELECT HASHBYTES('md5',CAST(ZLA_PASSWORD AS varchar)),ZLA_PASSWORD, len(ZLA_PASSWORD) FROM ZLA_PASSWORD;