※ ChatGPTを利用し、要約された質問です(原文:ハッシュ値のパスワードMYSQL検索で一致しない)
ハッシュ値のパスワードMYSQL検索で一致しない
このQ&Aのポイント
PHPでMYSQLにハッシュ値にしたパスワードを登録して、同じハッシュ値で検索を行いましたが、検索結果が一致しません。
パスワードの文字列をMD5を使ってハッシュ値に変換してMYSQLに登録しましたが、検索結果がゼロ件でした。
MD5でハッシュ化した文字列同士を比較してどうして検索結果が一致しないのでしょうか?
PHPでMYSQLにハッシュ値にしたパスワードを登録して、同じハッシュ値で検索を行いましたが、どうしても検索結果で一致しません。
パスワードの文字列をMD5を使ってハッシュ値に変換して次のようにMYSQLに登録しました。
$email = htmlspecialchars($_POST["email"]);
$user_name = htmlspecialchars($_POST["user_name"]);
$password = md5(htmlspecialchars($_POST["password"]));
$sql = 'INSERT INTO user_tbl (email,user_name,password) VALUES ( "' . $email . '","' . $user_name . '","' . $password . '" )';
$sth = $dd->prepare($sql);
$sth->execute( array() );
$qid = $dd->lastInsertId();
※user_tblの定義のこんな感じにしてあります。
CREATE TABLE user_tbl ( email varchar(50) NOT NULL,
user_name varchar(20) NOT NULL,
password VARCHAR(50) NOT NULL );
検索する処理でSQL等は次のように処理しましたが、検索結果がゼロ件でした。
$email = htmlspecialchars($_POST["email"]);
$beforepass = md5(htmlspecialchars($_POST["beforepass"]));
$afterpass = md5(htmlspecialchars($_POST["afterpass"]));
$sql = 'SELECT count(password) FROM user_tbl WHERE email = "' . $email . '" and password = "' . $beforepass . '"';
$q = $dd->prepare( $sql );
$q->execute();
if($q->fetchColumn() == 1){
//ここでパスワードが一致した場合の処理を書く
}
そこで次の2パターンのようにSQL文を少し変えてみたらそれぞれの検索結果が1件でした。
$sql = 'SELECT count(password) FROM user_tbl WHERE email = "' . $email . '" and password = "' . $beforepass . '"';
↓
$sql = 'SELECT count(password) FROM user_tbl WHERE email = "' . $email . '"';
$sql = 'SELECT count(password) FROM user_tbl WHERE email = "' . $email . '" and password = "' . $beforepass . '"';
↓
$sql = 'SELECT count(password) FROM user_tbl WHERE email = "' . $email . '" and user_name = "tanaka"';
(MYSQLのuser_tblのuser_nameには'tanaka'と入っている状態で実行したものです)
SQLに渡される各変数には文字列が代入済みであることが確認できています。
MD5でハッシュ化した文字列同士を比較してどうして検索結果が一致しないのでしょうか?
ちなみに検索したいパスワードのハッシュ値とDBに格納されているパスワードのハッシュ値を目で比較したら一致していました。
以上です。
ハッシュ値を検索条件に入れる場合に特殊な事をするのでしょうか?
ヒントだけでもよいので教えて下さい。
宜しくお願いします。
os: windows 7
eclipse: Version: 4.2.0
Build SDK: Android 4.1(API 16)
PHP 5
お礼
より多くの方のお知恵を借りたくて他でも質問しました。 知恵袋でもお世話になりました。