2011-08-18 60 views
0

我正在通過相當大的asp網站遷移到drupal。我已經成功遷移了大部分內容,現在我在遷移用戶方面遇到了一些麻煩。在drupal中向用戶密碼添加用戶特定的鹽

在ASP網站中,每個成員都有一個密碼和一個鹽列,當他們提供的密碼登錄後會附加salt和sha1加密,然後與db密碼進行比較。

我如何在drupal 6中實現這個功能? Drupal 6默認沒有鹽。我發現了一個drupal鹽模塊,但它非常簡單,只存儲了一個站點範圍內的salt值。

我是否需要向用戶表中添加鹽列並向drupal6登錄函數添加一些自定義邏輯?我意識到這是一個不好的做法,因爲將應用程序升級到更高版本的drupal可能會有問題。但是我們正在使用一堆drupal 6特定的模塊,所以我覺得升級到drupal 7將會是一場噩夢。有沒有人有過這個問題?什麼是最簡單的(該死的固定速度的網絡工作:)好方法來解決它?

基本上我有一個用戶表中的ASP應用程序,包括以下幾列:

名稱| Password_hash |鹽| etc

我需要一些方法將其遷移到Drupal。

回答

1

我強烈建議Password module 1.0分支爲此目的。它使您能夠提供自己的自定義password.inc文件,以確定如何對密碼進行散列和檢查。

+0

嘿戴夫感謝您的建議。我已經安裝了它,查看了生成的數據庫表並快速瀏覽了源代碼。我無法弄清楚它是如何實現鹽的。它似乎沒有一個表格列存儲每個用戶的鹽?鹽對每個用戶都是一樣的,還是可以從用戶屬性來確定?任何指針將非常感激!乾杯 – Nick

2

我不確定這是如何在Drupal 6中工作的,但Drupal 7實現了與db密碼比較時使用的salt在比較字符串中。當在password.inc _password_crypt()尋找,則$鹽被定義爲

$salt = substr($setting,4,8); 

凡$設定變量是分貝密碼的第一個12個字符。 鹽如果然後預置爲$密碼。

$hash = hash($algo, $salt . $password); 

重要的是要考慮到這個散列做了很多次,特別是增加了安全性。爲了知道它被散列了多少次,數據庫密碼的第二個字符(它實際上介於$符號之間)用於知道所採用的重複次數。該字符與名爲itoa64的字符串進行比較,因此此char的位置是log2重複次數。

$itoa64 = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; 

我的意思重複的的log 2號是實際數目將是2到該號碼的力量。因此,考慮到第一個數字在7到30之間,重複次數在128和1 073 741 824之間。

最後,加密的密碼以base64編碼,檢查(比較其長度前後的長度編碼)並且返回以由user_check_password進行比較或由user_hash_password用於存儲,其中隨機散列使用_password_generate_salt()生成。