2010-08-13 36 views
1

我目前有一個數據庫模式,其中包含純文本的用戶密碼。我已經添加了一個名爲密碼的二進制(16)的新列,目的是通過MD5散列當前純文本密碼。當我這樣做時,我發現存儲在密碼字段中的值是錯誤的。這裏是我的轉換查詢:varchar的HASHBYTES返回不正確的散列值

UPDATE my_table SET password=HASHBYTES('MD5', plain_text_password);

對於我的記錄之一,明文密碼是自衛隊。這個正確的MD5值是0x912ec803b2ce49e4a541068d495ab570。但是,該記錄正在更新爲0xEC81AFD2DF2BDA47850F9182F4AC300D

以前有沒有人見過這樣的問題?我使用的是SQL Server 2008的

更新: 這個多一點思考,我轉換的明文密碼字段從VARCHAR(MAX)爲varchar(50)。它在SQL管理工作室中以相同的方式顯示,但我想知道從varchar(MAX)格式的數據何時被複制到新的varchar(50)格式的基礎編碼,導致差異。

+1

是什麼讓你認爲返回的值不正確? – Rob 2010-08-13 23:06:03

+0

我有一個例程註冊使用相同的HASHBYTES函數和相同的二進制(16)字段的新用戶,它存儲正確的散列。 – David 2010-08-13 23:12:11

回答

1

所以我想通了這裏出了什麼問題。在我轉換了所有純文本密碼字段之後(或者這一切都是真實的,我不確定),一堆\ 0被添加到字段的末尾。所以,而不是'蘋果'這個詞,它是'apple \ 0 \ 0 \ 0 \ 0 \ 0'。 SQL Management Studio不顯示這些\ 0,但是Visual Studio調試器沒有。刪除所有結尾\ 0後,我的問題消失。