我目前有一個數據庫模式,其中包含純文本的用戶密碼。我已經添加了一個名爲密碼的二進制(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)格式的基礎編碼,導致差異。
是什麼讓你認爲返回的值不正確? – Rob 2010-08-13 23:06:03
我有一個例程註冊使用相同的HASHBYTES函數和相同的二進制(16)字段的新用戶,它存儲正確的散列。 – David 2010-08-13 23:12:11