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