答えて
をハッシュ。
説明
crypt()はパスワード暗号化 機能です。これは、 暗号化標準アルゴリズム のバリエーション(他の中でも の中で)を使用して、ハードウェアの使用を妨げることに基づいています。 キー検索の実装。
keyは、ユーザーの入力パスワードです。
saltは、[a-zA-Z0-9./]から を選択した2文字の文字列です。この 文字列は、4096の異なる方法のいずれかでアルゴリズムを摂動させるために使用されます。
+1の代わりではありません。 –
マニュアルページの著者しかし、ありがとう! –
Wikipedia FTW
ボトムライン:それは一方通行ではcrypt Man pageからtext
Randolphoが指摘するように、これはテキストの一方向ハッシュ処理です。
crypt()の標準的な使用方法は、パスワードの保存です。明らかに、パスワードをプレーンテキストとして保存することは、非常にうっかりするでしょう。代わりに、crypt()はパスワードのハッシュを生成するために使用されます。パスワードを入力すると、crypt()がそれに適用され、2つのハッシュが比較されます。
本質的に、crypt()の機能は、元のテキストを元に戻すことはできないが、2つの異なるキーに対して同じハッシュを生成する可能性の低い新しいテキストに翻訳することです。
暗号関数は、文字列として、キー、パスワードをとり、以下に説明される塩の文字列、および他の塩で始まる印刷可能なASCII文字列を返します。関数の出力が与えられると、その出力を生成する鍵を見つける最良の方法は、keyの元の値が見つかるまで鍵の値を推測することです。
他の回答はすべて正確ですが、これまで誰も説明していませんなぜ塩がありますか?
ウィキペディアには、saltsとRainbow Tablesという優れたページがありますが、これが塩分を有する主な理由です。
塩がないと、暗号は基本的に単方向ハッシュ関数です。それはパスワードを受け取り、そのパスワードのハッシュバージョンを返すでしょう。 Rainbow
テーブルは、このハッシュの「一方向」の性質を打破し、元のパスワードを取り消す最適化された方法を提供します。
ハッシュ化されたパスワードを取得することができれば(データベースエクスプロイトや/etc/passwd
または/etc/shadow
ファイルへのアクセス)、理論的には多くの人のパスワードを知ることができます。
塩は、余分な「ランダム」係数をミックスに加えます。あなたはランダムな塩を作り、それをどこかに保存する必要があります(パスワードはOKですが、別の方が良い)。今では1セットのレインボーテーブルでは不十分です。突然65536セットのこのようなテーブルが必要になります(2バイトの塩の場合)。この塩は、パスワードとは別に保管して、余分なハードルを追加することもできます。
塩も同じパスワードを持つユーザーが同じパスワードを持つように見えるのを防ぐのに役立ちます。塩は通常ランダムに選択され、塩が異なる場合、ハッシュされたパスワードは劇的に異なる。
また、私は非常に有益であることがわかりましたpassword basicsを説明するこのブログのエントリを指摘します。
@VladimirF、この答えで「塩」という言葉を意味しますか? – Mamun
- 1. cのcrypt()を元に戻す方法はありますか?
- 2. Objective Cでlaravel関数Crypt :: encrypt()を実装する方法は?
- 3. キャロットブラケットはC++で何をしますか?
- 4. \シンボルはC++で何をしますか?
- 5. RC2 Crypt SQL ServerとC#
- 6. dm-cryptはサーバー上でスワップを使用できませんか?
- 7. C#イベントパラメータは何をしますか?
- 8. C++ Armadillo:「norm_dot」は何をしますか?
- 9. C++ - [=]は何をしますか?
- 10. これは何をしますか? C++
- 11. Mac OS XでLinuxのgcc/gnu crypt(3)と同じcrypt(3)関数を取得するには? Linux gcc crypt(3)にはMD5とSHA512があります。 Apple GCC crypt(3)* only *はDESを使用します
- 12. C/C++プログラミングで%0x%xは何を意味しますか?
- 13. C++では何ができますか?
- 14. Objective-Cでは "return"ステートメントは何を意味しますか?
- 15. C++では "= 0"は何を意味しますか?
- 16. C++では "void *(*)(void *)"は何を意味しますか?
- 17. C++では "*(ポインタ+整数)"は何をしますか?
- 18. Objective-Cでは "and"キーワードは何を意味しますか?
- 19. Cではint(* ar)[]宣言は何を意味しますか?
- 20. Cでは%[^ \ n]は何を意味しますか?
- 21. git-crypt keyを変更するには
- 22. git-cryptをwindowsにインストールするには?
- 23. unix crypt(3)関数のOpenCL実装はありますか?
- 24. C++では::: meanは何ですか?
- 25. C#ではString *とは何ですか?
- 26. `printf`の%* c%* cとは何ですか?
- 27. C/C++用のマルチプラットフォームベクターグラフィックスライブラリは何ですか?
- 28. C#とは何ですか?Delphi TDecompressionStreamに相当しますか?
- 29. "name :: name"はC++で何を意味しますか?
- 30. C#でこれは正確に何を意味しますか?
-1 SOは、アルゴリズムを記述している実際の文章で 'perturb'という単語を正確に使用して管理するために、マニュアルページ – Nifle