0

最近、http_get メソッドを使用して統計を更新するゲームのログインと登録を処理するスクリプトを作成しました。すべてを正常に作成できましたが、問題があります。ユーザーが登録すると、PHP スクリプトが生成した別の md5 文字列が挿入されるため、パスワードを比較できません。

これは、md5 文字列をデータベースに挿入する方法です。

$pw = md5($password);
    $insert = mysqli_query($connect, "INSERT INTO Accounts (username, password, email,reg_ip, wins, looses, experience) VALUES ('$username', '$pw', '$email',  '$reg_ip', '0','0', '0')");
    if($insert) {
            echo "account successfully created"; 

        } 
        else {
            echo "error";
        }

そして、これは私がパスワードをチェックする方法です:

if($p['password'] == md5($password)) {
                echo "login was successful!";
            }
            else {
                echo "incorrect password";
            }

これは、ユーザー登録時にデータベースにある md5 文字列です: (暗号化されていない文字列: pocakaj123)

54e8850ba5eca655854ddf1b503943

これは I のときに生成される文字列ですecho md5($password)

54e8850ba5eca655854ddf1b50394348
4

1 に答える 1

6

これは、データベース内のフィールドの長さが原因です。紐全体が収まるように長さを長くする必要があります。

現在、30 文字しか受け付けないため、残りは切り捨てられます。

54e8850ba5eca655854ddf1b503943

文字列全体に収まるように、長さを少なくとも 32 に増やす必要があります。

54e8850ba5eca655854ddf1b50394348

ノート:

md5()はパスワードをハッシュする安全な方法ではありません。より良い方法はbcrypt()、代わりに PHP のパスワード ハッシュ関数を使用することですpassword_hash()

md5()安全でない理由:

MD5、SHA1、SHA256 などのハッシュ アルゴリズムは、非常に高速かつ効率的に設計されています。最新の技術とコンピューター機器により、元の入力を決定するために、これらのアルゴリズムの出力を「総当たり」することは簡単になりました。

http://php.net/manual/en/faq.passwords.phpから参照。

于 2016-04-23T00:50:39.070 に答える