2012-05-19 17 views
0

我有表,其中包含字段ID,用戶名,密碼和鹽的MySQL:如何改變SHA1和SALT加密口令表

實施例:

ID:1

用戶名:admin

密碼:11ca894 9f9462890f2535c9a43ac52b8c10a9342

:8d17f0de29daed0f3b4cd38f980683d01ec50729

沒有。這樣的記錄。

我的問題是:如何更改該表中所有用戶的密碼。

我想爲每個用戶創建一個新密碼。這意味着我需要一個新的SHA1哈希和鹽。我怎樣才能做到這一點。

感謝

+1

他們基本上可以用一個簡單的'UPDATE'查詢改變。你能否澄清一下改變它們的問題? – Teneff

+0

@Teneff:你的意思是直接在表上更新查詢? – Sky

回答

0

如果你有登錄代碼,那麼你可以調試它並檢查它是如何工作的。爲其創建適當的腳本並使用以下查詢更新密碼。

update be_users set password=SHA1(CONCAT( '$sha1', '$newsalt')), salt='your salt' where username='your username'; 

試一下這個

1

如果您沒有在DB明文原密碼(你當然不應該!),它不會成爲一個步驟。

您需要做的是添加另一列,併爲其指定一個名稱,如「hashtype」 - 此名稱指示條目是否已從舊哈希升級到新哈希。

然後在您的登錄代碼中,在用戶提交密碼並正確對存儲的數據庫哈希進行散列之後,使用用戶輸入的密碼爲您的新方法生成新的散列,更新數據庫中的散列並將hashtype設置爲新的。

否則,你可以做一些瘋狂的事情,如清除所有的用戶密碼,並強制通過電子郵件或其他方式重置密碼。

+0

這是IMO的最佳解決方案。 –

2

假設你希望每個人都具有相同的固定密碼,和散列只包含連接而成的密碼和鹽的SHA1校驗和,這將是所有需要:

UPDATE users SET password = SHA1(CONCAT('newpassword', salt)); 

這使原來的鹽(這不是一個真正的問題),但當然,給每個人使用相同的密碼是非常不安全的。如果你想爲每個用戶生成一個不同的密碼,你需要生成代碼並將它們分別發送給它們,並且該代碼也可以更新每個用戶的哈希密碼。

或者,您可以臨時添加一列'newpassword',使用類似於上面的使用該列的UPDATE命令,然後刪除它。但是這並不能解決如何爲用戶獲取新密碼的問題。

+0

:如果我有它的原始密碼 – Sky

+1

@Kunal:如果您有權訪問數據庫,那完全沒有關係。除非你想做一些奇怪的事情,比如用一些前綴或後綴將每個人的密碼改爲以前的密碼。如果你知道原始的明文密碼,這的確是可能的。 –

+0

好....感謝邁克爾 – Sky