2010-01-12 59 views
1

我的用戶表(SQL Server 2008)中的密碼字段在插入時使用HASHBYTES加密。我有一個存儲過程,其中包含用戶名和明文密碼的參數,SELECT使用該用戶名和密碼通過HASHBYTES發送,如果找到匹配則返回用戶記錄。 SP總是返回一個空的記錄集,但是如果我只將SELECT從SP複製並粘貼到新的查詢窗口,它將返回匹配的記錄。 SP中沒有其他聲明。我在這裏錯過了一些東西;它是什麼?已存儲的程序中的哈希碼比較不匹配記錄

回答

2

如果SELECT本身起作用,但在程序內部不起作用,我首先要查找的是參數類型。哈希將在類似的輸入,但不同類型的瘋狂變化:

select hashbytes('MD5','Lorem Ipsum'), hashbytes('MD5',N'Lorem Ipsum') 
+0

謝謝。真正的問題是我試圖查詢我通過INSERT語句設置的記錄,但我沒有指定unicode。我更新了記錄,現在它工作。 – 2010-01-12 19:13:24

+0

順便說一句,當我想我應該使用「散列」時,我使用了「加密」一詞。錯誤承認。 – 2010-01-12 19:14:40

+0

因爲我們在NVARCHAR(MAX)類型的列中存儲和MDF哈希,所以我們被燒了。該代碼行是'byte [] inputBytes = System.Text.Encoding.ASCII.GetBytes(input)'。ASCII需要更改爲UTF-8。 – Kuyenda 2011-12-05 23:32:55

0

從代碼中調用它時如何傳遞參數?是否有嵌入的CR/LF或空白?

+0

也許,但我懷疑它。我已經通過使用命令參數的代碼(ASP.NET C#)嘗試了這一點,並使用SSMS中的執行存儲過程功能。兩者的結果相同。 – 2010-01-12 17:46:59