2009-07-19 10 views
0
crypt(text,"k7") 

私はそれを見て、明らかに「k7」は塩ですが、その意味もアウトプットのタイプも分かりません。Cではcrypt()は何をしますか?

+2

-1 SOは、アルゴリズムを記述している実際の文章で 'perturb'という単語を正確に使用して管理するために、マニュアルページ – Nifle

答えて

8

をハッシュ。

説明

crypt()はパスワード暗号化 機能です。これは、 暗号化標準アルゴリズム のバリエーション(他の中でも の中で)を使用して、ハードウェアの使用を妨げることに基づいています。 キー検索の実装。

keyは、ユーザーの入力パスワードです。

saltは、[a-zA-Z0-9./]から を選択した2文字の文字列です。この 文字列は、4096の異なる方法のいずれかでアルゴリズムを摂動させるために使用されます。

+4

+1の代わりではありません。 –

+3

マニュアルページの著者しかし、ありがとう! –

1

Randolphoが指摘するように、これはテキストの一方向ハッシュ処理です。

crypt()の標準的な使用方法は、パスワードの保存です。明らかに、パスワードをプレーンテキストとして保存することは、非常にうっかりするでしょう。代わりに、crypt()はパスワードのハッシュを生成するために使用されます。パスワードを入力すると、crypt()がそれに適用され、2つのハッシュが比較されます。

本質的に、crypt()の機能は、元のテキストを元に戻すことはできないが、2つの異なるキーに対して同じハッシュを生成する可能性の低い新しいテキストに翻訳することです。

0

C Manual - Crypt

暗号関数は、文字列として、キー、パスワードをとり、以下に説明される塩の文字列、および他の塩で始まる印刷可能なASCII文字列を返します。関数の出力が与えられると、その出力を生成する鍵を見つける最良の方法は、keyの元の値が見つかるまで鍵の値を推測することです。

8

他の回答はすべて正確ですが、これまで誰も説明していませんなぜ塩がありますか?

ウィキペディアには、saltsRainbow Tablesという優れたページがありますが、これが塩分を有する主な理由です。

塩がないと、暗号は基本的に単方向ハッシュ関数です。それはパスワードを受け取り、そのパスワードのハッシュバージョンを返すでしょう。 Rainbowテーブルは、このハッシュの「一方向」の性質を打破し、元のパスワードを取り消す最適化された方法を提供します。

ハッシュ化されたパスワードを取得することができれば(データベースエクスプロイトや/etc/passwdまたは/etc/shadowファイルへのアクセス)、理論的には多くの人のパスワードを知ることができます。

塩は、余分な「ランダム」係数をミックスに加えます。あなたはランダムな塩を作り、それをどこかに保存する必要があります(パスワードはOKですが、別の方が良い)。今では1セットのレインボーテーブルでは不十分です。突然65536セットのこのようなテーブルが必要になります(2バイトの塩の場合)。この塩は、パスワードとは別に保管して、余分なハードルを追加することもできます。

塩も同じパスワードを持つユーザーが同じパスワードを持つように見えるのを防ぐのに役立ちます。塩は通常ランダムに選択され、塩が異なる場合、ハッシュされたパスワードは劇的に異なる。

また、私は非常に有益であることがわかりましたpassword basicsを説明するこのブログのエントリを指摘します。

+0

@VladimirF、この答えで「塩」という言葉を意味しますか? – Mamun

関連する問題