2010-10-20 35 views
1

在我的數據庫中,我有超過600個用戶。密碼之前被存儲爲純文本(掌握,我知道)。無論如何,我已經更改了我的代碼來存儲STA1哈希密碼,但我需要轉換數據庫中的現有密碼,以便每個用戶不需要進入和修改其帳戶。將數據庫中的文本密碼轉換爲散列密碼?

任何幫助?

回答

2

首先,用mysqldump備份你的數據庫。例如

bash#> mysqldump -u username -p nameoftable >file_to_write_to.sql 

此外,請確保您的密碼字段長40個字符。如果不是,執行SQL命令:

alter table nameoftable modify column password varchar(40); 

,然後這個改變密碼:

update nameoftable set password=sha1(password) where 1; 
+0

非常完美,非常感謝。每個人都差不多說了同樣的話。這一切都很完美 – BigMike 2010-10-20 21:04:55

2

試試這個:

update your_table set passfield = sha1(passfield); 

在此之前作出適當的備份,因爲你將無法扭轉操作(這是一個HASH函數的整個目的)。

請記住,SHA1將返回HEX編碼的二進制值。

2

如果你已經在用散列密碼的數據庫用戶,那麼要小心全部更換表立刻。您最終可能會將SHA1散列重新轉換爲新的SHA1散列。

如果您已經擁有使用哈希密碼的新用戶,請編寫腳本查詢數據庫中所有密碼,如果其長度小於40(或20,如果您將第二個參數設置爲true),則生成新的基於當前密碼的SHA1哈希(如果少於40個字符,您將知道它是明文),並將舊密碼替換爲新密碼。