crypt(text,"k7")
私はそれを調べたところ、どうやら「k7」はソルトですが、それが何を意味するのか、それからどのようなタイプの出力が得られるのかわかりません。
説明
crypt() はパスワード暗号化関数です。これは、(とりわけ) キー検索のハードウェア実装の使用を思いとどまらせることを意図したバリエーションを持つデータ暗号化標準アルゴリズムに基づいています。
key は、ユーザーが入力したパスワードです。
salt は、セット [a-zA-Z0-9./] から選択された 2 文字の文字列です。この文字列は、4096 通りの方法のいずれかでアルゴリズムを混乱させるために使用されます。
他のすべての答えは正しいですが、これまでのところ、塩が存在する理由を説明した人はいません。
ウィキペディアには、ソルトとレインボー テーブルに関する優れたページがあり、これがソルトを使用する主な理由です。
ソルトがなければ、crypt は基本的に一方向のハッシュ関数にすぎません。パスワードを受け取り、そのパスワードのハッシュ バージョンを返します。Rainbow
テーブルは、このハッシュの「一方向」の性質を打ち破り、元のパスワードを取り消すための最適化された方法を提供します。
/etc/passwd
ハッシュ化されたパスワードを(データベースの悪用、またはファイルへのアクセスを介して)取得できた場合、/etc/shadow
理論的には多くの人のパスワードを知ることができます。
塩は、ミックスに「ランダム」要素を追加します。ランダムなソルトを作成し、それをどこかに保存する必要があります(パスワードを使用しても問題ありませんが、別のほうが良いです)。1 セットのレインボー テーブルでは不十分で、突然 65,536 セットのそのようなテーブルが必要になります (2 バイトのソルトの場合)。また、salt をパスワードとは別に保管することもできますが、これはさらにハードルが高くなります。
ソルトは、同じパスワードを持つユーザーが同じパスワードを持っているように見えるのを防ぐのにも役立ちます。通常、ソルトはランダムに選択され、ソルトが異なる場合、ハッシュ化されたパスワードは劇的に異なります。
また、パスワードの基本について説明しているこのブログ エントリも紹介します。これは非常に参考になりました。
Randolpho が指摘するように、これはテキストの一方向ハッシュ プロセスです。
crypt() の標準的な用途は、パスワードの保存です。明らかに、パスワードをプレーンテキストとして保存することは非常に賢明ではありません。代わりに、crypt() を使用してパスワードのハッシュを生成します。パスワードを入力すると、それに crypt() が適用され、2 つのハッシュが比較されます。
基本的に、crypt() の機能は、テキストを新しいテキストに変換することです。このテキストから元のテキストを復元することはできませんが、2 つの異なるキーに対して同じハッシュを生成する可能性は低くなります。
crypt 関数は、文字列としてパスワード、キー、および後述するソルト文字配列を受け取り、別のソルトで始まる印刷可能な ASCII 文字列を返します。関数の出力が与えられた場合、その出力を生成するキーを見つける最良の方法は、キーの元の値が見つかるまでキーの値を推測することであると考えられています。
ウィキペディアFTW
結論:一方向ハッシュtext