我們將密碼哈希存儲在數據庫中。基本上我們得到MD5散列(字節數組),然後在字節數組上運行Encoding.Unicode.GetChars並將結果字符串存儲在數據庫中。然後當有人登錄時,我們以相同的方式散列他們的密碼並比較兩個字符串。T-SQL在不轉換爲UNICODE的情況下從VARCHAR獲取字節
這很好,除了我無法在T-SQL中提取密碼哈希並將其插入另一行。我可以得到這個工作的唯一方法是,如果我實際上使用有效散列直接從另一行中選擇密碼散列。
我試圖將字符串轉換爲十六進制,並讓SQL將其轉換,但這也不起作用。我認爲這是因爲我們編碼爲UNICODE的字節可能不會構成有效的UNICODE字符串。
因此,例如(SQL Server: Convert a string into a hex string and back):
當您運行下面的命令,這個詞「幫助」被轉換爲VAR二進制文件,然後返回一個字符串和變戲法似的!你最終再次獲得'幫助'。
SELECT CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), 'Help'))
問題是,當我運行我的密碼哈希列,如存儲在該列所得到的值是不一樣的。如果我將包含散列的字符串粘貼到兩個'符號之間的SQL Management Studio中,它會跳過'並放入其他字符。再次,probalby試圖插入一個不完整的UNICODE序列,因爲它不是一個合適的UNICODE字符串。
所以我正在尋找一種方法來簡單地拿個字節的VARCHAR(64),其中包含的密碼哈希,並將其寫入到一個編碼文本格式,是這樣的:
0x0F037584C99E7FD4F4F8C59550F8F507
使然後我可以做類似
UPDATE [User]
SET PasswordHash = CONVERT(NVARCHAR(64), 0x0F037584C99E7FD4F4F8C59550F8F507)
WHERE UserID = 123
任何想法?