2012-10-09 91 views
4

下面我有它回聲一個鹹魚密碼的一段代碼:如何作爲一個字符串顯示鹹魚密碼

  $pass = rand(); 
      $pass = md5($pass); 
      $pass = substr($pass, 0, 15); 
      $pass = md5(md5("g3f".$pass."rt4")); 

現在,如果我回聲$通,則輸出這個例如:

8723d9c8a8b2af798be25fd07ab0ff0a 

但我想要做的就是呼應密碼本身,以便例如,而不是顯示它上面會顯示這是「密碼」的字符串。

這是如何實現的?

謝謝

+0

嗯,我想醃密碼的罪是加密的密碼。您無法取回密碼。 – Stony

+0

我希望在數據庫中密碼散列,但我希望密碼的字符串顯示在電子郵件中,因爲如果用戶在他們的登錄中輸入了密碼,它不會讓他們因爲它們不是他們的實際密碼。 – user1723760

+0

用戶不應輸入密碼鹹魚,他們應該進入一個密碼時應 - 從知道它是安全的一邊,他們甚至不應該在乎有鹽爲好,更別說知道鹽 –

回答

0

不要覆蓋變量$pass;

$pass = rand(); 
    $md5pass = md5($pass); 
    $md5pass = substr($md5pass, 0, 15); 
    $md5pass = md5(md5("g3f".$md5pass."rt4")); 

MD5哈希特別是用鹽是一種單向過程。你不能扭轉它。

任何好的密碼系統不存儲原始密碼,但存儲的散列副本,然後它驗證用戶通過散列它們的輸入和比較兩個輸入無誤。

+0

@ user1723760是的,在你的例子中,你用哈希版本覆蓋了'$ pass',這個副本'$ pass'保持不變。 –

+0

謝謝,當我回來時,我會標記答案,必須等待10分鐘。 – user1723760

10

你不能。哈希是一條單行道。如果您想隱藏需要稍後顯示的字符串,則需要使用加密。但是,當涉及到密碼時,這是一個禁忌。

爲了解決這個問題的第二部分,你永遠不應該通過電子郵件發送用戶密碼。實施服務器端解決方案(例如使用安全問題+驗證他們的電子郵件),並在驗證後允許用戶直接在網站上更改密碼。

哦,還有一件事 - 忘記MD5 !!!!

+0

理論上,@ walther是完全正確的,但在實踐中,有一種方法:http://en.wikipedia.org/wiki/Rainbow_table –

+0

@LaurentBrieu這就是爲什麼鹽存在並使彩虹表幾乎無用。彩虹表只是一個預先設定的字符串的大量索引(稍微簡化)。 –

+1

@LaurentBrieu,實際上,你作爲網站管理員,會考慮使用彩虹表來顯示用戶密碼嗎?此外,你可以想象使用彩虹表或蠻力攻擊網站本身獲得用戶密碼?最後但並非最不重要的一點是,他正在談論鹽漬密碼 - 你的彩虹桌無用,正如喬治已經說過的那樣...... – walther

0
 $pass = rand(); 
     $originalPass = $pass; 
     $pass = md5($pass); 
     $pass = substr($pass, 0, 15); 
     $pass = md5(md5("g3f".$pass."rt4")); 
     echo $originalPass; 

或者

$pass = rand(); 
    echo $pass; 
    $pass = md5($pass); 
    $pass = substr($pass, 0, 15); 
    $pass = md5(md5("g3f".$pass."rt4")); 
+0

這也適用:) – user1723760

+0

你不應該以純文本存儲用戶密碼......違反多個原則,不提及雙MD5或使用MD5! – walther

+0

我並不是說他用任何方式存儲它,只是他可以用這種方式輸出它。 –

相關問題