2009-09-26 28 views
0

在我的項目中,我處於缺乏sql編程知識的地步。我有一個帶有passowrd字段的tbUser。但是,現在我必須將它們轉換爲哈希MD5,對於哈希來說非常好。如何選擇所有行並使用其哈希碼更新字段?

但是,如何選擇記錄的所有密碼並使用它的哈希值更新它們?我並不需要散列值部分,只需選擇全部並更新每一行。

而且由於HASHBYTES代碼

HashBytes('MD5', 'MyPassword') 

我需要每一行「MyPassword輸入」做散列部;

回答

1

如果確實HASHBYTES()是描述的,這是所有你可能需要

UPDATE tblUsers 
    SET password = HashBytes('MD5', password) 
    --WHERE -- here you could have some condition if somehow you didn't want 
       --all of the row updated. 

但是,你可以考慮替代,修改表有一個新列,把它叫做MD5,而是做'SET md5 = ...'這樣可以讓你臨時保存密碼,萬一不能正常工作,或者你想用混淆的MD5登錄測試幾次登錄,這可能會很方便。

+0

謝謝mjv!我找到了答案! – AndreMiranda 2009-09-26 02:27:29

1

這是有用的,我的解決方法是這樣的:

UPDATE tbUsers 
SET password = SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', tbUsers.password)),3,32) 
FROM tbUsers INNER JOIN tbUsers tbUsers2 
ON tbUsers.codUser = tbUsers2.codUser 
0

我不知道這樣做的原因,但根據記錄,密碼的哈希值提供了對密碼的發現很少的保護可以訪問散列密碼的人,至少對於弱密碼。預先計算幾十億個潛在密碼的MD5哈希(單詞,名稱,與A-> 4,I-> 1,O-> 0替換相同,單詞加倍或最後加1,隨機短字符串等)並將它們編入索引,並將它們與生成它們的密碼一起存儲在表中。找到一個哈希密碼,如果密碼是其中一個十億分之一,你可以在閃存中找到它。您還可以瞭解一組人是否都使用相同的密碼(如果您有權訪問所有密碼哈希)。

如果您爲了安全起見,請考慮將存儲哈希密碼的密碼作爲開始的可能性。