Linuxのパスワードセキュリティについて学習しています(何よりも好奇心が強い)。実際のパスワードはハッシュされ、シャドウパスワードファイルに保存されることを理解しています。私が確信が持てず、私の簡単なグーグル検索で見つけることができなかったのは、ハッシュ値(およびソルトの値)をエンコードするために使用されるエンコードです。これは明らかに16進数ではなく、:
文字を除いて、明らかにテキストです。ここの誰かがそのエンコーディングが何であるかを教えてもらえますか?
編集:ハッシュ(MD5、SHA-X)、ソルト、およびハッシュ指定子を理解しています。私が探しているのは、ハッシュ結果(バイト配列(byte []))をファイルに表示される文字のシーケンス、つまりエンコードに変換する方法です。
MD5 crypt()の場合、ソルトは[a-zA-Z0-9./]からの最大8文字のランダムな文字列です。
次に、saltとパスワードがハッシュされ、強化関数に渡され、Base64のバリアントを使用してエンコードされます。
パスワードのエンコード方法だけを知りたい場合、crypt()は特殊なBase64タイプのエンコードを使用します。
Base64エンコーディングは次の文字セットを使用します:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /
crypt()エンコーディングがこの文字セットを使用している間:./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
また、Base64とは異なり、「=」パディングはありません。
一方、MD5、SHA-Xなどのcrypt()実装は、ランダムなソルトを生成してハッシュ関数を実行し、以前のエンコーディングを使用してそれをエンコードするだけではありません。
「MD5に関連するMD5-cryptでのパスワードハッシュ」 と 「SHA512-cryptとMD5-cryptの実装」 " 、より完全な説明。
$の間のハッシュの最初の部分は、使用されているアルゴリズムを示しています。
さまざまな値の意味の一覧については、 http://en.wikipedia.org/wiki/Crypt_%28Unix%29 を確認してください。
使用されているアルゴリズムを探していますか?
従来、Unixと初期のLinuxバリアントは、弱められたDES=最大8文字のパスワードに基づいていました。最新のLinuxインストールのほとんどは、パスワードにMD5ハッシュを使用し、一部はSHAをサポートしています。 Blowfishを含む追加のアルゴリズムのサポートが明らかになりました。ほとんどのLinuxで使用されているGNU libcは、DES、MD5、およびSHAをサポートしており、いくつかのオプションを提供しています。
使用される特定のタイプのハッシュアルゴリズムは、パスワードの先頭として$ DIGIT $として指定されます。たとえば、$ 1 $はMD5です。
ウィキペディア( Crypt_(Unix) )のページを参照するか、「crypt unix」または「crypt linux」についてはgoogleから詳細を取得できます。