1

このトピックがstackoverflowで頻繁に取り上げられていることは知っていますが、探している答えに下線が引かれていません。

私が言ったmd5暗号化を使用します(私がphpの初心者だったときは少し前でした)安全ですが、古き良きGoogleで調べると、暗号化と復号化が行われています。

だから私は他の場所、別名ここを探し始めました。

SHA-1、MD5、SHA-2、SHA-256、SHA-512など、すべての暗号化方法について聞いたことがあります。

多くの人がBcryptを使用していると言っていますが、それはSHA-512と比較しています。

ハッカーがデータベースをハッキングしてすべてのパスワードのソルトを取得すると言うので、ハッカーがすべてのパスワードを復号化して移動する前にすべてのソルトを変更するのは小さなウィンドウであるため、人々はランダムなソルトを使用してデータベースに保存すると言います。他の場所に移動して、たとえばfacebook、google、stackoverflowを試してみてください

だから私の質問は、このようにそれを行う最も安全な方法です((SHA-512で)暗号化し、データベースにも保存されるランダムソルトを使用します)、またはデータベースのランダムソルトと同程度のセキュリティ。

そして、私はこれに関する多くの投稿を読んだので、私が話していることを知っていると思います.20について正確に言うと、これについて多くの投稿を読んだことを冷静に言うのが好きです.

ああ、ほとんど忘れていました。パスワードを複数回暗号化した方が安全ですか、それとも 1 回だけ暗号化した場合とほぼ同じですか?

何度も書きすぎた投稿を手伝ってくれてありがとう

少し混乱させて申し訳ありませんが、他の人の投稿の要点がわかりませんでした。暗号化についてとりとめのないことを始めましたが、文字列のハッシュについて話していました。

そのために残念

4

5 に答える 5

7

私が言ったmd5暗号化を使用します(私がphpの初心者だったときは少し前でした)安全でしたが、古き良きGoogleで調べると、暗号化と復号化が行われています。

最初にいくつかのつまらないこと。暗号化ではなくハッシュです。ハッシュ化は 1 つの方法です。あなたの質問に答えるために:md5()パスワードをハッシュするために使用しないでください。もう安全ではありません。壊れて数年経ちます。衝突が見つかっただけでなく (同じハッシュになる複数の値)、適切な GPU を使用してmd5 を非常に高速にブルートフォースすることができます。

多くの人がBcryptを使用していると言っていますが、それはSHA-512と比較しています

bcrypt を使用する必要があります。現時点では、これがパスワード ハッシュの最適なオプションです。

そして人々は、ランダムなソルトを使用してデータベースに保存すると言いますが、これはばかげています

いいえ、それはばかではありません。パスワードをソルティングすると、攻撃者がすべてのパスワードのレインボー テーブルを作成するのを防ぎます。ircmaxellは、便宜上パスワード lib を作成しました。これはGitHubにあります。

関連記事とスタック オーバーフローの投稿:

アップデート

PHP 5.5 がリリースされると、パスワードを正しく暗号化する簡単な方法が導入されます。デフォルトで bcrypt を使用し、パスワードにソルトを自動的に追加します。将来、より優れたアルゴリズム (scrypt など) が利用可能になると、それを使用できるようになります。詳細については、この新機能に関する RFC を参照してください。また、現在ハッシュされているパスワードに使用されているアルゴリズムを検出し、ユーザーが新しい (/より安全な) アルゴリズムにログインしたときにそれらを自動的に更新する機能も備えています。実装例については、この GitHub gistを確認してください。

まだ古いバージョンの PHP を使用していて更新できない場合は、PHP >= 5.3.7 をサポートする C API の純粋な PHP 実装を利用できます。この互換 API は、C API とまったく同じ実装を使用します。

注: より安全な scrypt を使用する方が良いでしょうが、今のところ PHP はそれをサポートしていません。ある時点でそうであれば、この回答を更新します。

于 2012-04-26T08:55:23.763 に答える
2

ハッシュ暗号化を混同しています。

于 2012-04-26T08:48:35.677 に答える
0

塩は、考えられるすべての結果の事前計算を妨げるため、価値があります。複数のラウンドは物事を少し遅くするのにも役立ちますが、誰かがハッシュにアクセスして複数のGPUを自由に使えるようになったとしてもそれほどではありません。具体的に質問に答えるために、私があなたであり、bcryptを使用できるのであれば、私はそうします。SHA-512ハッシュのみを使用する場合は、ソルトと複数のラウンド(数万ラウンド)を使用します。

また、MD5やSHA1のハッシュなどは一方向です。ハッシュから元の出力を取得する唯一の方法は、力ずくでそれを推測することです。

于 2012-04-26T09:09:54.860 に答える
0

ユーザー名の特定の文字とphpコードの文字列をソルトします。理論的には、それを理解するにはコードとデータベースが必要です。

于 2012-04-26T08:49:45.857 に答える
0

2015 年 6 月の更新:

@PeeHa が述べたように、PHP 5.5 には組み込みのメカニズムと、PHP でハッシュ化されたパスワードを実装するための短いチュートリアル/説明が含まれています。パスワードハッシュで確認できます。

パスワードハッシュは、次の方法を使用して可能です。

  • string password_hash ( string $password , integer $algo [, array $options ] )

password_hash() は、強力な一方向ハッシュ アルゴリズムを使用して新しいパスワード ハッシュを作成します。password_hash() は crypt() と互換性があります。したがって、crypt() によって作成されたパスワード ハッシュは、password_hash() で使用できます。

  • boolean password_verify ( string $password , string $hash )

指定されたハッシュが指定されたパスワードと一致することを確認します。

おそらくユーザーからの入力を受け取ることになるので、SQL インジェクションを防ぐために、これらの方法を使用して入力をクリアすることをお勧めします。

ユーザー入力を安全に SQL クエリに挿入できる準備済みステートメントを使用できます。

 $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
 $stmt->bindParam(':name', $name);
 $stmt->bindParam(':value', $value);

 $name = 'one';
 $value = 1;
 $stmt->execute();

@Theos answerの準備済みステートメントに関する詳細情報。

他の代替手段は、ユーザー入力文字列をクリアすることです:

  • string stripslashes ( string $str )

stripslashes() の使用例は、PHP ディレクティブの magic_quotes_gpc がオン (PHP 5.4 より前はデフォルトでオン) で、エスケープが必要な場所 (データベースなど) にこのデータを挿入していない場合です。たとえば、単純に HTML フォームから直接データを出力する場合です。ストリップスラッシュ API

  • string mysqli::escape_string ( string $escapestr )

この関数は、SQL ステートメントで使用できる有効な SQL 文字列を作成するために使用されます。指定された文字列は、接続の現在の文字セットを考慮して、エスケープされた SQL 文字列にエンコードされます。 real_escape_string API

于 2015-06-10T08:37:04.843 に答える