バイナリハッシュとは何かを理解しようとしています。私の理解では、メッセージを D1 から D4 の 4 つの部分に分割し、それらの各部分を個別に持って H1 から H4 を得るということです。次に、H1+H2 と H3+H4 をハッシュして、H5 と H6 を作成します。次に、H5 と H6 をハッシュして、最終的なハッシュ値 H を生成します。これは正しいですか? そうでない場合は、どこが間違っているのか教えてください、ありがとう!
3 に答える
CRC32について説明しているこのページを見てください -古き良きウィキペディア
これはおそらく最も単純なハッシュ アルゴリズムです (もちろん、最善とは言えません!) が、ハッシュがどのように機能するかについての一般的なアイデアを提供するはずです。
他のすべてのハッシュアルゴリズムは基本的に同じことを行いますが、元に戻すのが難しいアルゴリズム (sha256 など) か、結果をより均等に分散させて衝突の可能性を低くするアルゴリズム (perlhash など) を使用します。
どちらが最適かは、ハッシュの目的によって異なります。
- ファイルが改ざんされていないことを証明する --> sha256/512.
- 秘密にしたいパスワードやその他の値を保存する --> sha256/512
- 文字列から配列またはデータベース レコードの数値キーを取得する --> perlhash など。
- 口座番号をすばやく難読化またはマスキングする --> crc32
これは、perl プログラミング言語bob burtle のハッシュで使用されるハッシュ関数を説明する優れた記事です。
あなたは正しいです。ウィキペディアの写真はそれをかなり説明しています: https://en.wikipedia.org/wiki/Merkle_tree
元のメッセージをどのように分割するかは、実装によって異なります。明らかに、メッセージが比較的小さい場合、それを何百万ものブロックに分割しても意味がありません。同様に、メッセージが非常に大きい場合、それぞれを 1 バイトのブロックに分割するのは厄介です。
分割を使用しているすべての人に分割を伝える必要があることを忘れないでください。それ以外の場合、ハッシュは一致しません