2

crypt2つのドキュメント化された文字列を比較してそれらが一致するかどうかを確認することは可能ですか?

ユーザーがログインすると、ユーザーのIDとそれに対応するcrypt-edパスワードハッシュを格納するセッションが作成されます。バックグラウンドでは、セッション(読み取り、パスワード)がまだ有効かどうかを確認するためのチェックが実行され続けます。

cryptしたがって、技術的には、データベースの-edパスワードをセッションの暗号化されたパスワードと比較したいと思います。これは可能ですか?

編集:

パスワードを暗号化するために次の方法を使用していたと言うべきでした。

    function better_crypt($input, $rounds = 7)
  {
    $salt = "";
    $salt_chars = array_merge(range('A','Z'), range('a','z'), range(0,9));
    for($i=0; $i < 22; $i++) {
      $salt .= $salt_chars[array_rand($salt_chars)];
    }
    return crypt($input, sprintf('$2a$%02d$', $rounds) . $salt);
  }
4

5 に答える 5

5

のPHPマニュアルをcrypt確認してください。この例では、パスワードを検証する方法(つまり、比較する方法)を明確に示しています。

<?php
$hashed_password = crypt('mypassword'); // let the salt be automatically generated

/* You should pass the entire results of crypt() as the salt for comparing a
   password, to avoid problems when different hashing algorithms are used. (As
   it says above, standard DES-based password hashing uses a 2-character salt,
   but MD5-based hashing uses 12.) */
if (crypt($user_input, $hashed_password) == $hashed_password) {
   echo "Password verified!";
}
?>

(もちろん)2つのハッシュされたパスワードを直接比較することはできますが(両方とも文字列であるため)、それらが等しいとは限りません。

crypt「非常に」安全ではない可能性があることに注意してください。PHPパスワードのセキュアハッシュとソルトで詳細を読み、パスワードハッシュに関するPHPマニュアルエントリを参照してください:http://php.net/faq.passwords-これで始めることができます。

于 2013-01-07T12:54:08.653 に答える
0

ハッシュ化されたパスワードは、同等かどうかを比較できます。

于 2013-01-07T12:52:48.603 に答える
0

暗号化された 2 つの文字列を比較して、一致するかどうかを確認することはできますか? 【パスワード照合用】

はい。可能であるだけでなく、推奨されるベスト プラクティスです。実際のパスワードではなく、パスワードのハッシュ化されたバージョンのみをDBに保存する必要があるため、比較するハッシュ化されたバージョンのみを保持する必要があります。それを行うと、とにかく元に戻すことができないため、明らかにハッシュを比較する必要があります。

ただし、bcrypt などの安全なハッシュ ルーチンを使用していることを確認してください。ハッシュやsha1などにmd5を使用しないでください。

また、独自のパスワードを作成するのではなく、十分にテストされたライブラリを使用してパスワードを管理することをお勧めします。これをお勧めします: https://github.com/ircmaxell/password_compat -- これは、セキュリティを担当するコア PHP 開発者の 1 人によって書かれており、この lib によって提供される同じ関数が PHP 自体の一部として組み込まれます次の PHP バージョン (v5.5) のリリースは 1 ~ 2 か月後に予定されているため、将来的にも安全です。

于 2013-01-07T12:59:38.497 に答える
0

2 つの文字列を単純に比較できます。if ($_SESSION['hash'] == $databasehash).

2 つのパスワードを比較する理由 データベースにセッション テーブルを作成し、ユーザーがまだログインしているかどうかを確認することをお勧めします。また、これを IP にバインドするか、ユーザーにそうするオプションを与えます。それはより多くのセキュリティを追加します。

さらに、$_SESSION の有効期限が切れた後にユーザーが戻ってきた場合、Cookie を保存できます。Cookie と保存されている IP およびハッシュを比較して、まだ実行可能かどうかを確認します。

于 2013-01-07T12:56:36.743 に答える
-1

はい、それがパスワードをハッシュする目的です。

重要な警告の 1 つは、ハッシュ関数は実際の全単射写像ではなく、ある程度の衝突を特徴とすることです。ハッシュ != 暗号化を指摘するだけです。

于 2013-01-07T12:56:48.553 に答える