Ryan A wrote:
> Hey, I have a old htpasswd file with a lot of logins in this format:
> 
> test:dGRkPurkuWmW2 (test:test) test1:dGlAW3zdxeAG2 (test1:test1)
> 
> now I have a login form what takes a POST "user" and a POST "pw"...
> but if you look at my above first example login.. the username and
> pass are "test:test" but it gets encoded into "test:dGRkPurkuWmW2" so
> how do I try to match the data I get from the POST "pw" field when
> that will come in as normal text?

Hi, Ryan.  I did some research on this.  As I recollected, the .htpasswd
entries are saved using the hashing performed by PHP's crypt() function.
  The function requires a salt, which appears to be the string 'dG' in
the .htpasswd data you provided.

Here's some example code to use this.

<?php
// represents the data saved in your .htpasswd file
$htpasswordData = array('test'  => 'dGRkPurkuWmW2', 'test1' =>
'dGlAW3zdxeAG2');

// represents logins as they would be supplied by users
$logins = array(array('name' => 'test',  'password' => 'test'),
                array('name' => 'test1', 'password' => 'test1'));

foreach ($logins as $login) {
    if (isset($htpasswordData[$login['name']])) {
        $salt = substr($htpasswordData[$login['name']], 0, 2);
        $suppliedPasswordHash = crypt($login['password'], $salt);

        if ($suppliedPasswordHash == $htpasswordData[$login['name']]) {
            echo "<p>User {$login['name']} logged in.</p>";
        } else {
            echo "<p>Wrong password.  Access denied.</p>";
        }
    } else {
        echo "<p>No such user.</p>";
    }
}
?>

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to