2015-05-19 56 views
0

我有一個奇怪的情況使用MSSQL 2008 R2的Hashbytes函數。Hashbytes函數輸出

選擇密碼,Hashbytes('SHA1','sa')返回 0x3608A6D1A05ABA23EA390E5F3B48203DBB7241F7。

後來我手動更新我的表字段到這個值,但是 其中Password = Hashbytes('SHA1','sa') 不給我任何結果。我已經使用了varbinary,binary,varchar,nvarchar和char數據類型。請提出可能是什麼問題以及我如何解決問題。謝謝。

回答

0

根據the documentation,對於SHA-1,SHA和SHA1的輸出大小爲「160位(20字節)」。

因此這樣的:

declare @password varbinary(19); 
set @password = HASHBYTES('SHA1','sa'); 
if @password= HASHBYTES('SHA1','sa') 
    print 'yes'; 
else 
    print 'no' 

回報no,因爲沒有足夠的空間來存儲正確的結果;但是這個

declare @password varbinary(20); 
set @password = HASHBYTES('SHA1','sa'); 
if @password= HASHBYTES('SHA1','sa') 
    print 'yes'; 
else 
    print 'no' 

返回yes。如果您的Password字段是binaryvarbinary並且有20個字節的空間,則應該是正常的。


順便說一句,如果你只是指定binaryvarbinary,沒有長度,你會得到字節,這是通常不是你想要的。

+0

工作的很好,謝謝! –