1

関数がどのように機能するかを理解しようとしていますpassword_hash()

私は、私が選択した 4 つのパスワードを使用して、この超単純化された php ログイン (完全に安全ではなく、学習するように設計されています) を取得しました。

<?php

$data = file_get_contents('pass.txt');

if($_POST['pass']) {
    $line = explode("\n", $data);
    for($i = 0; $i<count($line); $i++) {
        $item = explode("#", $line[$i]);
        if($_POST['pass'] == $item[0]) {
            echo "Welcome! You're logged in!";
        }
    }
}

else { echo '<form method="POST" action="">
            <input type="password" name="pass">
            <input type="submit">
            <form>';
}

?>

パスワードが保持されてpass.txtいる場所 (.txt フラットファイル データベース):

passone
passtwo
passthree
passfour

コードに password_hash() 関数を追加することは可能ですか?

この関数はログインするたびにパスワードを書き換えるので、phpはこの目的のためにデータベースを書き換えることができるはずだと思います。

みんなありがとうXXX

4

2 に答える 2

1

はい。

ああ、isset を使用する必要があります。そうしないと、PHP エラーが発生する可能性があります。そしてあなたは壊れるべきです。正しいパスワードを見つけた後は、残りは CPU の浪費です。

最初に pass.txt を作成します。

<?php
$passes=array(
'passone','passtwo','passthree'
);
foreach($passes as &$pass){
$pass=password_hash($pass,PASSWORD_DEFAULT);
}
file_put_contents("pass.txt",implode("\n",$passes));

それから好きにする

<?php

$data = file_get_contents('pass.txt');

if(array_key_exists('pass',$_POST)){
    $lines = explode("\n", $data);
    for($i = 0; $i<count($lines); $i++) {
        if(password_verify($_POST['pass'],$lines[$i])) {
            echo "Welcome! You're logged in!";
            break;
        }
    }
}

else { echo '<form method="POST" action="">
            <input type="password" name="pass">
            <input type="submit">
            <form>';
}
  • しかし、警告の言葉。個人的には、password_hash が好きではありません。なぜなら、他の言語で書かれたアプリケーション (私のシナリオでは C++) と統合するのは簡単ではないからです。ハッシュ構造は (私が知る限り) 明確に定義されていません。コード..
于 2015-09-17T09:54:02.863 に答える