2011-11-09 67 views
1

UPDATE:MD5沒有給出正確的散列?

響應FOUND AT:

http://community.invisionpower.com/tracker/issue-21634-md5-once-password-does-not-decode-html-entities/


我想用我的論壇憑據(我使用Invision電源板)進行分離頁面 ,所以我開始研究如何對密碼進行操作。

主要是對會員表,你有members_pass_hash和members_pass_salt表和加密如下進行:

/** 
* Generates a compiled passhash. 
* Returns a new MD5 hash of the supplied salt and MD5 hash of the password 
* 
* @param string  User's salt (5 random chars) 
* @param string  User's MD5 hash of their password 
* @return string  MD5 hash of compiled salted password 
*/ 
static public function generateCompiledPasshash($salt, $md5_once_password) 
{ 
    return md5(md5($salt) . $md5_once_password); 
} 

從那以後,我開始做我的頁面,但無論我做什麼密碼永不相匹配的中數據庫。

即使使用MD5(CONCAT(MD5(members_pass_salt),MD5('mypass'))直接對MySQL不給我正確的價值...

我也搜索了社區和IPB的論壇,但不能縮小東西可以在這裏是問題。

產生的密碼我的這段代碼是如下:

$password = $this->input->post('password'); 
$md5_once_password = md5($password); 
$password_hash = md5(md5($salt) . $md5_once_password); 

$鹽來自於數據庫和我有呼應到我的網頁,以確保它是正確的鹽爲好。

在IPB代碼繼續還有:

if ($member['members_pass_hash'] == self::generateCompiledPasshash($member['members_pass_salt'], $md5_once_password)) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 

並回到初始一段代碼我從IPB貼吧意味着密碼與md5(md5($salt) . $md5_once_password)

免受成員表中的字段 members_pass_hash匹配

任何想法,我可能做錯了,以使密碼不匹配?

編碼的地方或任何東西?

更新與hashs來進行測試:

這一個正常工作:

salt: Do.|O 
password: fsk23478cf 
hash: f3f3c75110ea9a27a1c01e580676997f 

這一個不工作,不知道爲什麼又:

salt: ppxps 
password: fsk23478cf!* 
hash saved by the forum: d060c2fb78c5b8a9e9d303c7b4fab456 
hash created by my aap: 0df0c7f24f7f79bd7ad8e501f5447986 

UPDATE2:

指責問題是exclamation mark上的密碼,但仍不知道是什麼原因造成的,以及如何解決。

密碼與!將無法​​正常匹配,並且現在我想看看論壇做什麼特別的!,我還沒有找到,所有我所發現的是,它並修剪密碼字段和那麼md5就像上面說的那樣。

+0

這有點不清楚。你是說你用兩個不同的代碼計算散列,結果不匹配? –

+0

@Oli查爾斯沃斯出於某種原因是的,這就是我想找出來的。像這樣的代碼都是一樣的,但哈希從不匹配相同的密碼和從數據庫中保存的鹽。 – Prix

+0

好的。你可以發佈一個最小的,自包含的代碼示例來演示這個問題嗎? –

回答

0

你應該知道,如果你給任何值md5(),它將輸出總是相同的值

這就是說,並假設您使用這兩種算法檢查相同的密碼,它似乎就像你的鹽在這兩種情況下不相同。它可能是一個字符,它可能是一些看不見的字符,也可能是鹽的不同來源,但似乎第一種情況下的鹽不是第二種情況下的鹽。

只要確保在討論板上有帳戶,並檢查正在檢查的密碼(可能在調用函數/方法時將其保存到文件中?),並與傳遞給新創建函數的內容進行比較。

md5()不是魔術,如果你傳遞相同的值,它不應該有不同的表現 - 這是哈希函數的基礎。 問題在於您傳遞給md5()的值。

+0

似乎就像我在密碼中使用'!*'指明瞭一些相關內容,現在我需要弄清楚代碼中哪些地方不正確。 – Prix

+0

有更新我的問題與哈希和他們的結果當失敗!*如果你有任何想法:) – Prix

+0

@Prix:這似乎是與IPB的問題 - 請參閱[這個錯誤報告有關如果密碼有驚歎號登錄問題]( http://joomlacode.org/gf/project/jfusion/tracker/?action=TrackerItemEdit&tracker_item_id=9856)。找到IPB在將密碼傳遞給'md5()'之前如何更改密碼是很好的,所以你可以模仿這種行爲。感嘆號是否被刪除或替換? – Tadeck

0

嘗試修剪您的通行證,當您有\ n或任何其他類型的LF時,bcs會在字符串+ lf之外計算散列值。我希望這可以幫到你。

+0

代碼點火器默認是這樣做的,但我也試過修改密碼並且沒有改變。 – Prix

+0

你可以嘗試另一種方式,也許ipb在最後做一個LF,所以你必須添加它?它只是一個愚蠢的想法 –

0

的長和短在此:

當躍躍欲試MD5哈希明文密碼IPB通過ヶ輛先運行它()。

+1

其實這並非如此,這也是一個相當古老的問題,但我可以回想起嘗試' html_entity_decode「,但最重要的是,IPB還有一個名爲'cleanPassword'的密碼解析函數,可以在他們的api代碼中看到,這是我找到答案並獲得代碼工作的地方,但是我沒有代碼,所以這就是就像我記得的那樣。 – Prix