2011-04-10 80 views
1

我嘗試計算某個值的md5哈希,但是我得到了一個奇怪的結果。在SQL Server中使用HashBytes從DB返回不同的結果

我在兩種不同的方式運行:

SELECT HASHBYTES('md5',ZLA_PASSWORD),ZLA_PASSWORD, len(ZLA_PASSWORD) FROM ZLA_PASSWORD; 

SELECT HASHBYTES('md5', '123456'); 

我得到兩個不同的結果,其中只有第二個是有效的:

0xCE0BFD15059B68D67688884D7A3D3E8C 123456 6 
0xE10ADC3949BA59ABBE56E057F20F883E 

這是一個SQL服務器上完成2005

在123456上檢查MD5的結果與第二個在線檢查結果相同。

任何想法?

謝謝!

回答

1

LEN返回長度之前修剪的內容(剪裁字符串)。

最有可能你的密碼字段爲CHAR場,並在那裏得到了空白。

儘量散列之前做了RTRIM:

SELECT HASHBYTES('md5',RTRIM(ZLA_PASSWORD)) 
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 
+0

投射結果並沒有幫助,這是第二個參數錯誤。 – 2012-02-06 13:17:16

+0

@TomChiverton - 誰對鑄造有什麼看法? – 2012-02-06 13:29:08

+0

SELECT HASHBYTES('md5','123456')vch,hashbytes('md5',N'123456')nvch; vch:0xE10ADC3949BA59ABBE56E057F20F883E nvch:0xCE0BFD15059B68D67688884D7A3D3E8C – 2012-12-13 06:52:22

1

更準確地說這應該解決的問題:

SELECT HASHBYTES('md5',CAST(ZLA_PASSWORD AS varchar)),ZLA_PASSWORD, len(ZLA_PASSWORD) FROM ZLA_PASSWORD; 
相關問題