2011-11-03 100 views
0

我编写了一个类来使用HTTP身份验证摘要方式对用户进行身份验证。我阅读了一些文章,并使其工作。现在,我想让它使用Md5密码,但我似乎无法得到它的工作,这是验证用户的功能。使用MD5进行PHP摘要式身份验证

public function authenticate() { 

// In case the user is not logged in already. 
if (empty($_SERVER['PHP_AUTH_DIGEST'])) { 

    // Return the headers. 
    $this->show_auth(); 

} else { 

    // Parse the given Digest-data. 
    $data = $this->parse_request($_SERVER['PHP_AUTH_DIGEST']); 

    // Check the data. 
    if (!$data) { 

     // Display an error message. 
     die($this->unauthorized); 

    } else { 

     // Based on the given information, generate the valid response. 
     $usr_password = "test"; 

     // Generate the response partly. 
     $A1 = md5($data['username'].":".$this->get_realm().":".$usr_password); 
     $A2 = md5($_SERVER['REQUEST_METHOD'].":".$data['uri']); 

     // Generate the valid response. 
     $val_response = md5($A1.":".$data['nonce'].":".$data['nc'].":".$data['cnonce'].":".$data['qop'].":".$A2); 

     // Compare the valid response with the given response. 
     if ($data['response'] != $val_response) { 

      // Display the login again. 
      $this->show_auth(); 

     } else { 

      // Return true. 
      return true; 

     } 

    } 

} 

}

所以可以想象$ usr_password = “测试” 将是$ usr_password = MD5( “测试”);

如何比较密码呢?

谢谢。

回答

1

MD5功能是散列函数,以产生对于相同的输入相同的结果单向方法。

因此,比较$password1$password2不透露(直接比较)他们都应该是足够的,比较他们的哈希值:

$hash1 = md5($password1); // hash for pass 1 
$hash2 = md5($password2); // hash for pass 2 

if ($hash1 === $hash2) { 
    // here goes the code to support case of passwords being identical 
} else { 
    // here goes the code to support case of passwords not being identical 
} 

是否足够清晰?让我知道。

+0

我知道如何工作的,只是没怎么密码的比较在HTTP认证过程的处理。 – Roel