2014-02-27 57 views
0

因此,一個緊急項目被遺棄在我身上,將MySQL用戶數據庫合併到現有的Django用戶數據庫中。是否可以使用Perl創建Django密碼?

我已經想出了除了如何處理密碼,因爲他們使用不同的散列。我不瞭解Python,Django後端,或者非常瞭解哈希技術。

我的確有辦法用他們的電子郵件驗證用戶,我只需要一種方法將他們給我的密碼以Django可接受的方式保存到數據庫中。這將不得不在Perl中完成,因爲這是我在服務器上唯一知道的語言。

我發現this page談論Django如何處理密碼,但我很遺憾地不明白他們說的大部分內容。另外,我不知道這是任何幫助,但Django的網站管理方面給出的

「使用‘[算法中] $ [鹽] $ [hexdigest]’」爲「提示」密碼。

這對我來說也沒有多大意義,但也許它對你們中的一個呢?

+0

你有密碼哈希創建的鹽嗎? – Drewness

+0

我可以訪問所有的Python腳本,權力Django的,所以如果有人可以告訴我,我需要看看在哪些文件,我可以得到它。 –

+0

現有的Django用戶的算法是什麼? (第一個$之前的部分) – ysth

回答

0

基本上有兩種處理方法:將現有密碼轉換爲Django可接受的格式,或者編寫您自己的Django密碼搜索器。

對於第一種方式,如您所見,密碼字段由三部分組成,每部分由$分隔。 (Django的1.6密碼可以有4個部分,但讓我們忽略了額外的一部分,現在,因爲Django的1.6還支持更傳統的3部分組成的密碼。)的部分是

  • 算法,它描述了密碼散列算法;它看起來像MD5PBKDF2
  • 鹽,的散列算法的鹽
  • hexdigest,哈希密碼

因此,假設您的密碼已醃製和散列,腳本需要在現有數據庫中使用散列/醃製的密碼,將散列中的salt分開,然後將它們存儲到數據庫中,並在前面加上適當的算法字符串。應該有使用各種算法進行密碼散列的Perl模塊。 Django推薦的算法是PBKDF2。 bcrypt也不錯。不過就Django而言,任何散列算法都很好,只要它具有該算法的內置散列器(Django具有最常用的散列算法的哈希器)。

如果您現有的密碼沒有被鹽漬和散列......好吧,現在應該是這樣做的好時機。 ;-)


的另一種方法是隻在密碼複製到新的數據庫,不被寫自己password hasher處理它們在你的Django應用程序。當然,這需要編寫一些Python代碼。

+0

因此,如果該算法SHA-1,是足夠寫一個Perl腳本,需要一個未加密的密碼並將其轉換爲Django的東西會用?我們仍然像Django 0.8一樣,因爲公司(正確地)害怕升級會打破某些東西,我們沒有任何人知道Django。 –

+1

寫一個新的密碼哈希聽起來不像一個選項,因爲它聽起來像他們有現有的Django用戶以及他們正在添加的。 – ysth

+0

正如@ysth所說,數據庫中已有用戶正在合併新的數據庫。我們已經接受了一個事實,即MySQL用戶在下次登錄時必須選擇新的/重新輸入密碼。我所要做的就是給他們發送唯一鏈接(以確認每個用戶),然後在那個鏈接上,讓他們選擇一個新密碼並以Django在嘗試登錄時識別的格式將其添加到數據庫中。我不知道鹽是如何工作的?通過已經在數據庫中鹽的名單看,它總是5個十六進制字符,有些是一樣的,大多數都是獨特的 –

相關問題