-2

発生している問題を検索する方法がわかりませんでした。

コードは正しく機能してランダムに生成された暗号化されたパスワードを生成しますが、HTMLフォームを送信するときにパスワードは機能しません。SQLクエリを使用してパスワードを確認し、パスワードが有効であることを確認しました。

以下のユーザーへの応答として、私が使用したクエリは次のとおりです。

SELECT * FROM users WHERE email='test@test.com' AND password=MD5('03884d917f');

03884d917fは、生成されたパスワードです。test@test.comアカウントに正しく問い合わせました。

簡潔に言うと、生成されたパスワードはMySQLで適切に変更されますが、フロントエンドで送信すると、それを使用してログインできません。

追加のコードは必要ないと思います。使用できるのはconfig.phpだけです。これは、データベースの接続とメール関数の変数の確立のみを処理します。

人々を収容するために私がどのようにポストを変えることができるかについての実際の入力なしで2つの反対票。問題を絞り込もうとしましたが、他にどのように説明すればよいかわかりません。誰かが何か実質的なもので応答したいですか?

PHP:

    <?php
    require_once('config.php');
    mysql_select_db($database,$dbhandle);
    include_once('includes/header.inc.php');
    include_once('includes/navigation.inc.php');

    if (isset($_POST['submit'])) 
    {

    $email = $_POST['remail'];
    $pattern = '/^[^@]+@[^\s\r\n\'";,@%]+$/';
    if (!preg_match($pattern, trim($email))) {
      $error[] = 'Please enter a valid email address';
    } 

    $check = mysql_query("SELECT email FROM users WHERE email = '$email'")or
    die(mysql_error());
    $check2 = mysql_num_rows($check);

    if ($check2 == 0) {
    $error[] = 'Sorry, we cannot find your account details please try another email address.';
    }

    if (!$error) {

    $query = mysql_query("SELECT email FROM users WHERE email = '$email' ")or die         (mysql_error());
    $r = mysql_fetch_object($query);

    $password = substr(uniqid(rand(),1),3,10);
    $pass = md5($password); //encrypted version for database entry

    $to = "$email";
    $subject = "Account Details Recovery";
    $body = "Hi $r->email, \n\n you or someone else have requested your account details. \n\n Here is your account information please keep this as you may need this at a later stage. \n\nYour email is $r->email \n\n your password is $password \n\n Your password has been reset please login and change your password to something more rememberable.\n\n Regards Site Admin";
    $additionalheaders = "From: admin@cenz.cz";
    $additionalheaders .= "Reply-To: admin@cenz.cz";
    mail($to, $subject, $body, $additionalheaders);

    //update database
    $sql = mysql_query("UPDATE users SET password='$pass' WHERE email = '$email'")or die (mysql_error());
    $rsent = true;


    }
    }

    if (!empty($error))
    {
    $i = 0;
    while ($i < count($error)){
    echo "<div class=\"msg-error\">".$error[$i]."</div>";
    $i ++;}
    }


    if ($rsent == true){
echo "<p align='center'>You have been sent an email with your account details to $email</p>\n";
} else {
echo "<h2>Reset Password</h2><p align='center'>Please enter your e-mail address. You will receive a new password via e-mail.</p>\n";
}

    ?>

    <form class="box login" action="" method="post">
    <fieldset class="boxBody">
    <label for="remail">Email Address: </label>
    <input type="text" name="remail" size="50" maxlength="255" tabindex="1" />
    </fieldset>
    <footer>
    <input type="submit" name="submit" value="Reset Password" class="btnLogin" tabindex="2">
    </footer>
    </form>
    <?php include_once('includes/footer.inc.php'); ?>
4

2 に答える 2

0

別の方法で暗号化することにしました。この問題は、MD5 による暗号化に関係していました。代わりに、sha256 暗号化を使用しました。

使用したコードは次のとおりです。

    function HashPassword($input)
    {
    random salt
    $salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); 
    $hash = hash("sha256", $salt . $input); 
    $final = $salt . $hash; 
    return $final;
    }
    $password = substr(uniqid(rand(),1),3,10);
    $pass = (HashPassword($password));
于 2012-11-17T10:39:59.037 に答える
0

md5() は、文字エンコーディングに従ってハッシュを生成します。

たとえば、テーブルのエンコーディングが utf-8 の場合、次のようにエンコードします。

$pass = md5(utf8_encode($password));
于 2012-11-17T02:56:14.287 に答える