質問

私は Windows ベースの Subversion を使用していて、Apache パスワード ファイルを操作するための簡単なユーティリティを .NET で作成したいと考えています。MD5Crypt と呼ばれる関数を使用していることは理解していますが、ある時点で MD5 を使用してハッシュを作成するということ以外のアルゴリズムの説明が見つからないようです。

誰か MD5Crypt アルゴリズムとパスワード行形式について説明してもらえますか?

役に立ちましたか?

解決

sha256 および sha512 で使用するために更新された暗号化アルゴリズムの正確なテキスト説明は、次の場所にあります。 http://www.akkadia.org/drepper/SHA-crypt.txt

MD5 アルゴリズムとの対照も含まれているため、探しているものが得られるはずです。

他のヒント

md5crypt の実装は次の場所にあります。 tcllib パッケージ。 ダウンロードは以下から可能です ソースフォージ.

Apache 互換の md5crypt の例も次の場所にあります。 CAS 汎用ハンドラーのソース コード

MD5Crypt は基本的に、昔ながらの Unix crypt 関数の代替品です。これは freebsd で導入され、他のグループでも採用されています。

基本的な考え方は次のとおりです。

  • ハッシュはパスワードを保存する良い方法です
    • ユーザーが入力したパスワードを取得してハッシュする
    • 保存されているハッシュと比較する
    • ハッシュが同じ場合、パスワードは一致します

しかし、問題があります。

  • あなたがパスワード「jeff」を選択し、私もパスワード「jeff」を選択したとします。
  • これで、両方のパスワード ハッシュが同じになりました。
  • したがって、保存されているハッシュ コードを見れば、あなたのパスワードが私のものと同じ「jeff」であることがわかります。

したがって、パスワードに「salt」文字列を追加できます。

  • これはランダムなものでもかまいません。
  • あなたのアカウントでは「zuzu」、私のアカウントでは「rjrj」であるとします。
  • ここで、あなたのパスワードとして文字列「jeffzuzu」をハッシュし、私のパスワードとして「jeffrjrj」をハッシュします。
  • これで、パスワードに異なるハッシュ値が設定されました。
  • ソルト値を知っていてもハッシュを解読するのには役立たないため、ハッシュされたパスワードとともにソルト値を安全に保存できます。

.net について言及していますが、別のフォーラムにこれへのポインタがあります。

System.Security.Cryptography.MD5CryptoServiceProvider md5 = new
System.Security.Cryptography.MD5CryptoServiceProvider();

string hash =BitConverter.ToString((md5.ComputeHash(
System.Text.ASCIIEncoding.Default.GetBytes(stringtohash) ) ));

ひーっ!

プロセスはかなり複雑です...ソルトとパスワードは 1 回ではなく 1000 回ハッシュ化されます。また、base64 エンコードでは別のアルファベットが使用され、末尾からパディングが削除されます。

おそらく最善の方法は、cygwin の glibc など、使用するライブラリを見つけることです。

とにかく Apache に対してコーディングするので、以下を見てください。 Apacheの実装 crypt-md5 の。

C のオリジナルのアルゴリズム (と思われます) が見つかります。 ここ. 。上記の実装とは、マジックナンバーが異なるだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top