web-dev-qa-db-ja.com

PHPログインパスワードのソルトおよびハッシュSHA256

登録スクリプトでパスワードの暗号化を行い、それらはデータベースに保存され、ログインに使用する必要があるため、暗号化されていないものを使用してログインします。ここでいくつかのスレッドを読みましたが、何も助けになりません。 login.phpに追加するにはどうすればよいですか?塩もデータベースに保存されます。

これは暗号化のためのregister.phpスクリプトです

$hash = hash('sha256', $password1);

function createSalt()
{
    $text = md5(uniqid(Rand(), TRUE));
    return substr($text, 0, 3);
}

$salt = createSalt();
$password = hash('sha256', $salt . $hash);

これは季節のある私のlogin.phpです

//Create query
$qry="SELECT * FROM member WHERE username='$username' AND password='$password'";
$result=mysql_query($qry);

//Check whether the query was successful or not
if($result) {
    if(mysql_num_rows($result) > 0) {
        //Login Successful
        session_regenerate_id();
        $member = mysql_fetch_assoc($result);
        $_SESSION['SESS_MEMBER_ID'] = $member['id'];
        $_SESSION['SESS_FIRST_NAME'] = $member['username'];
        $_SESSION['SESS_LAST_NAME'] = $member['password'];
        session_write_close();
        header("location: profile.php");
        exit();
    }
    else {
        //Login failed
        //error message 
    }
else {
    die("Query failed");
}
22
Simon_says

これらの例はphp.netからのものです。おかげで、新しいphpハッシュ関数についても知りました。

Phpのドキュメントを読んで、可能性とベストプラクティスについて調べてください。 http://www.php.net/manual/en/function.password-hash.php

パスワードハッシュを保存:

$options = [
    'cost' => 11,
];
// Get the password from post
$passwordFromPost = $_POST['password'];

$hash = password_hash($passwordFromPost, PASSWORD_BCRYPT, $options);

// Now insert it (with login or whatever) into your database, use mysqli or pdo!

パスワードハッシュを取得:

// Get the password from the database and compare it to a variable (for example post)
$passwordFromPost = $_POST['password'];
$hashedPasswordFromDB = ...;

if (password_verify($passwordFromPost, $hashedPasswordFromDB)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}
41
andreas

Php.netによると、SaltオプションはPHP 7.0.0で非推奨になったため、デフォルトで生成され、はるかにシンプルなsaltを使用する必要があります

パスワードの保存例:

$hashPassword = password_hash("password", PASSWORD_BCRYPT);

パスワードを確認する例:

$passwordCorrect = password_verify("password", $hashPassword);

3
anguswild

@ Flo254は$salt$password1にチェーンし、$hashed変数に格納したと思います。 $hashed変数は、$saltを使用してINSERTクエリ内に配置されます。

0
Herman

ログイン時に適切なソルトテキストを取得できなかったため、ログインできませんでした。 2つのオプションがあります。1つ目は静的ソルトの定義、2つ目は動的ソルトを作成する場合で、ユーザーに関連付けてソルト(データベース内の手段)を保存する必要がある場合です。これでユーザーsolt + password_hash文字列を連結するよりも、データベーステーブルのユーザー名でクエリを実行します。

0
Nikunj
array hash_algos(void)

echo hash('sha384', 'Message to be hashed'.'salt');

ここにリファレンスへのリンクがあります http://php.net/manual/en/function.hash.php

0
Ngend Lio