-4

db_passというデータベースに次のテーブルがあります。

id | pass
=================
1  | dalmation123

データベースにプレーンテキスト形式でパスワードを保存できないことは理解しています。ハッシュを設定するにはどうすればよいですか? これは私が以下で使用しているコードです。テーブルdb_passを変更する方法についても助けていただければ幸いです。

if(isset($_POST['pmsubmit']))
{
  LoginSubmit('pm', 'pmname', 'pmpass');
}

if(isset($_POST['tssubmit']))
{
  LoginSubmit('ts', 'dept', 'tspass');
}

function LoginSubmit($pm_or_ts, $the_name_input, $the_pass_input)
{
  global $pdo;
  $posted_name = $_POST[$the_name_input];
  $posted_pass = $_POST[$the_pass_input];
  // check if password matches the one in the table
  $query = $pdo->prepare("SELECT * FROM db_pass WHERE pass = :pass");
  $query->execute(array(":pass" => $posted_pass));
  // if there is a match then we log in the user
  if ($query->rowCount() > 0)
  {
    // session stuff
    $_SESSION[$the_name] = $posted_name;
    // refresh page
    header( 'Location: ' . $pm_or_ts . '/index.php' ) ;
    exit;
  } 
  // if there is no match then we present the user with an error
  else
  {
    echo "error";
    exit;
  }
}
4

3 に答える 3

1
$query = $pdo->prepare("SELECT * FROM db_pass WHERE pass = :pass");
$query->execute(array(":pass" => crypt($posted_pass)));

crypt実際にどのアルゴリズムが使用されているかは聞かないでください。手動入力はまったく無意味です-明らかに定数の値をチェックするだけで、使用されるアルゴリズムが変更され、crypt()ばかげています....

そして、人々がbcryptと言っても大丈夫です。しかし、bcryptPHP のコア関数ではありません。彼らが自分で書くつもりなら、それはばかげた考えです - あなたの実装には間違いなく欠陥があるからです。彼らがライブラリを意味する場合は、指摘する必要があります-PHPassは一般的に推奨されていますが、私はそれを自分で推奨する知識がありません.

ほとんどの人がまだそれを使用しsha1ていることは驚くことではありませんか?

于 2013-02-05T22:19:49.693 に答える
0

それはすべてこれに帰着します。データベースに保存する前に、ユーザー パスワードに対して操作を実行する必要があります。次に、送信されたパスワードに対して同じ操作を実行してから、そのパスワードがユーザー名とパスワードの組み合わせに対して有効かどうかを確認します。

ほとんどの場合、「操作」は MD5 や bcrypt などのハッシュまたは暗号化プロセスです。

于 2013-02-05T22:15:38.167 に答える
-1

MySQL では、BINARYタイプを使用して実際にハッシュを格納できます。MySQL の単純なハッシュ テーブルは次のようになります。

CREATE TABLE IF NOT EXISTS `hastable` (
  `hash` binary(20) NOT NULL,
  `value` blob NOT NULL,
  PRIMARY KEY (`hash`)
);

たとえば、SHA1 ハッシュは常に 160 ビット/20 バイトの長さであり、そのようなバイナリ列に格納できます。PHP を使用すると、次のようにハッシュを取得できます。hash( 'sha1', $key, true );

しかし、それはパスワードの保存とは何の関係もありません…</p>

于 2013-02-05T22:06:43.130 に答える