2015-09-04 59 views
-2

我要爲我的網站還挺創建身份驗證系統,但我遇到的問題與MD5函數 - 它不能正常工作,看看下面的代碼片段:PHP MD5返回相同的哈希不同的輸入

$valid_request = 0; 
$login = ""; 
$passwordMD5 = ""; 
$hardwareidMD5 = ""; 
$hash1 = ""; 
$hash2 = ""; 
// a - username 
// b - hardwareid md5 hash 
// c - password md5 hash 
// d - hash of (a+b+c) 
// e - hash of (a+b+c+d) 
if(isset($_GET['a']) && isset($_GET['b']) && isset($_GET['c']) 
    && isset($_GET['d']) && isset($_GET['e'])) 
{ 
    $login = $_GET['a']; 
    if(strlen($login) <= 32 && strlen($login) >= 1 && isValid($login,1) === 1) 
    { 
     $passwordMD5 = $_GET['b']; 
     if(strlen($passwordMD5) === 32 && isValid($passwordMD5,2) === 1) 
     { 
      $hardwareidMD5 = $_GET['c']; 
      if(strlen($hardwareidMD5) === 32 && isValid($hardwareidMD5,2) === 1) 
      { 
       $valid_request = 1; 
       $hash1 = MD5($login+$passwordMD5+$hardwareidMD5); 
       $hash2 = MD5($login+$passwordMD5+$hardwareidMD5+$hash1); 
       echo "HASH1: $hash1\n"."HASH2: $hash2\n"; 
      }else $valid_request = 0; 
     }else $valid_request = 0; 
    }else $valid_request = 0;  
}else 
    $valid_request = 0; 

問題是該行:

$hash1 = MD5($login+$passwordMD5+$hardwareidMD5); 
$hash2 = MD5($login+$passwordMD5+$hardwareidMD5+$hash1); 
echo "HASH1: $hash1\n"."HASH2: $hash2\n"; 

它總是打印兩次相同的MD5,頁面的源代碼如下所示:

HASH1: cfcd208495d565ef66e7dff9f98764da 
HASH2: cfcd208495d565ef66e7dff9f98764da 
+0

你有偏見的Javascript **很多**,哥們。 –

+0

你確定要添加('+')字符串嗎? – Zsw

+0

查看[手冊](http://php.net/manual/en/book.password.php)關於如何在新版本的PHP中加密你的密碼。 –

回答

3

問題是,您試圖連接md5函數的參數與+而不是.

但是,如果你允許我,我想建議你不要再使用md5來輸入密碼。使用sha256來代替。下面是鏈接的解釋: Reasons why SHA512 is superior to MD5

+1

其實他應該使用密碼散列API。 –

+0

他應該也可以用他的哈希值,但可能對他的項目來說,這個簡單的答案就足夠了。 –

+2

使用新的api,所有密碼默認都是鹽漬的。 –

相關問題