web-dev-qa-db-ja.com

穏やかなハッシュ関数のチュートリアルはありますか?

恥ずかしいことに、ハッシュ関数(たとえば、文字列や整数のセットなどをハッシュするため)を選択することは、私にとってまだ魔法です。ここでいくつかの素数を取り、そこで魔法の定数を取り、ビットシフトを行い、何かを法として、完了します。

ハッシュ関数の作成について、優しくて親しみやすいチュートリアルはありますか?

29
Frank

ハッシュアルゴリズムの基本的な説明を見つけるのがどれほど難しいかは不思議です。トピックが非常に難しいため、基本的なチュートリアルを作成するのは簡単ではないかもしれません。私は自分で1つを探していて、同じ問題に遭遇しました。

しかし、あなたはこのページを試すことができます。すばらしいのは、ページを読んだ後、下部にテキストボックスがあることです。そのボックスにテキストを追加してフォームを送信すると、入力テキストがどのようにハッシュされるかが段階的に一覧表示されます。

http://www.metamorphosite.com/one-way-hash-encryption-sha1-data-software

幸運を。もっと良いものを見つけたら、ここに投稿すると本当に助かります。

16
websprinter

まともで簡単なハッシュチュートリアルは ハッシュテーブルチュートリアル (ハッシュ関数についても説明します)にあります。あなたがウェブ検索をするならば、あなたはたくさんの良い情報を見つけることができることに注意してください。

ウィキペディアには、 ハッシュテーブルハッシュ関数 の両方に関する基本的な情報があります。

[〜#〜]編集[〜#〜]

同様の質問が以前に尋ねられました: どのハッシュ関数を選択すべきか 。質疑応答は素晴らしいです。

3
Edward Leno

これから リンク 、概要を示すいくつかのセクションの下で強調表示

優れたハッシュ関数を作成するもの

最も優れたハッシュ関数は、テーブルサイズNで除算した後の余りを計算することで機能します。

これは常に0からN-1の間の値を与えるので適切ですが、Nが素数の場合、テーブル全体にデータを分散させるのにも優れています。もちろん、ハッシュしたいテキスト値がある場合は、最初にそれを適切な数値に変換する必要があり、例のような単純なスキームでは実行できません。

可能なテキスト値ごとに異なる数値を生成する必要があり、最初の2文字のASCIIコードを合計しても明らかに機能しません。より良い方法は、各ASCIIコードに、最初の文字を1、2番目を10、3番目を100というように掛けて、文字の位置で重み付けすることです。単一の値を与える。

一般に、本当に優れたハッシュ関数を構築することは困難であり、ほとんどの場合、優れたプロパティを持ち、十分にテストされたハッシュ関数を見つける必要があります。

1
toing