問題タブ [php-password-hash]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - PHP5.5でのパスワードハッシュの生成とコストオプションの設定
PHP 5.5がアルファ版であることは知っていますが、私が作成しているこのクラスは、function_exists()を使用してハッシュ機能を利用するために事前に作成されています。
password_hash
ドキュメントをチェックしました。3番目の引数は、現在2つのオプション「salt」と「cost」をサポートしている$options用です。
それは次のように述べています:
コスト。使用する必要のあるアルゴリズムコストを示します。これらの値の例は、crypt()ページにあります。
crypt()ページに移動すると、ドキュメントが表示されます。
次のようにソルトを使用したブローフィッシュハッシュ:「$ 2a $」、「$ 2x $」、または「$ 2y $」、2桁のコストパラメータ「$」、アルファベットからの22桁「./0-9A-Za -z」。ソルトでこの範囲外の文字を使用すると、crypt()は長さゼロの文字列を返します。2桁のコストパラメータは、基になるBlowfishベースのハッシュアルゴリズムの反復回数の2を底とする対数であり、範囲04〜31である必要があります。この範囲外の値では、crypt()が失敗します。5.3.7より前のバージョンのPHPは、ソルトプレフィックスとして「$ 2a $」のみをサポートします。PHP5.3.7では、Blowfish実装のセキュリティ上の弱点を修正するために新しいプレフィックスが導入されました。セキュリティ修正の詳細については、»このドキュメントを参照してください。ただし、要約すると、開発者はPHP5.3のみを対象としています。
頭を包み込むことができないようです。PHP5.3.7以降は$2y$を使用する必要があると書かれていますが、それを取得するためにどのようなコスト値を使用しますか?それを選択するのに最適な値ですか?彼らが提供する例では、値7を使用していますが、上記によれば、最大31になる可能性があります。たとえば、31ではなく4を使用すると、どのような違いがありますか?
php - PHP 5.5 の password_hash および password_verify 関数を使用する
ユーザーのパスワードを保存したいとします。これは、PHP 5.5 のpassword_hash()
関数 (または PHP 5.3.7+ のこのバージョン: https://github.com/ircmaxell/password_compat ) でそれを行う正しい方法でしょうか?
それから私はするだろう:
データベースに挿入します。
次に確認します。
php - ログインが機能しないのはなぜですか? 私のハッシュ方法にエラーがありますか/それは正しいですか?
登録:
検証:
私が使用したすぐに廃止予定のメソッドは無視してください。すぐに変更します。
なぜこれが機能しないのですか?ユーザー名のパスワードが間違っていると検出されます。
このライブラリを使用して、以前のバージョンで PHP 5.5 関数を許可しています: https://github.com/ircmaxell/password_compat
(はい、その関数を使用できます。私は PHP 5.3.15 を使用しています)
php - password_hash のデフォルトのアルゴリズムは何ですか?
PHP 5.5 の新しいpassword_hash関数に関するドキュメントを読んで、デフォルトのアルゴリズムは何なのか疑問に思っています。
それに関するドキュメントはこれを明確にしません: http://www.php.net/manual/en/password.constants.php
php - Zend_Auth_Adapter_DbTable で php 5.5 パスワード API を使用する方法
サイトがライブではなく、新しいパスワード apiを待つことにしたため、これまですべてのパスワードをプレーンテキストで保存していました。
このコードは、プレーンテキストのパスワードに対して機能します。
ドキュメントによると、私は独自のアダプターを実装し、おそらく password_verify() を使用するように変更する必要があります。
ここでは、すべてがどのように連携しているかの全体像を見逃しています。
私の質問は:
- 魔女オブジェクトを変更する必要がありますか?
$authAdaper
また$auth
高レベル (または低レベル:D) のコード例をいただければ幸いです。
最高のアダム
php - ハッシュ化されたパスワードを検証できません
パスワードの暗号化に SHA-512 を使用しています。私はすべてを正しく行っていると思います (そして、他の場所で成功しているコードを複製することさえあります) が、パスワードを入力しようとするたびに、データベースに保存したものと一致しません。
次の明らかな潜在的な問題を確認し、原因としてそれらを排除しました。
1) データベースに暗号化されたパスワードが保存されている
2) このパスワードを取得し、変数 $db_password に保存できます
3) 変数 $username と $currentPlaintext には、私の ajax 関数呼び出しによって渡された正しい値があります。
では、なぜこれが機能しないのでしょうか。明らかな何かが欠けていますか?ありがとう!
編集:これまでのコメントをありがとう。明確にするために、crypt() 関数を理解しているので、crypt の 2 番目の引数は、実際には db に格納されている文字列全体です。この文字列には、ハッシュされたパスワードだけでなく、アルゴリズム、salt 値、およびハッシュのラウンド数も含まれます。crypt() 関数は、この文字列からソルト値を引き出し、それを適用して最初の引数をハッシュすることになっています。その結果は、以前にハッシュされたパスワードと比較されます。だからこそ、これはとても混乱しています。ソルト値を指定する必要はありません。ソルトはデータベースにあります。この関数で何が起こっているのか誤解していますか?
私はもともとこのコードでパスワードをハッシュしました: