8

ハッシュ関数は、入力に関係なく常に固定長の出力を生成します (つまり、MD5 >> 128 ビット、SHA-256 >> 256 ビット)。

デザイナーが設計した方法であることは知っていますが、出力を同じ長さに設計したのはなぜですか? 一貫した方法で保存できるようにするには?比較されやすい?それほど複雑ではありませんか?

4

3 に答える 3

6

それがハッシュの定義だからです。ウィキペディア参照

ハッシュ関数は、任意のサイズのデジタル データを固定サイズのデジタル データにマッピングするために使用できる任意の関数です。

あなたの質問が、ハッシュが固定サイズであることがなぜ有用であるかに関連している場合、複数の理由があります (非網羅的なリスト):

  • ハッシュは通常、より大きな (多くの場合、任意のサイズの) 入力をより小さなサイズにエンコードします。通常、損失の多い方法で行われます。つまり、圧縮関数とは異なり、プロセスを「逆にする」ことによってハッシュ値から入力を再構築することはできません。
  • 固定サイズの出力を持つことは、特にルックアップ キーとして使用するように設計されたハッシュの場合に便利です。
  • ハッシュ値の記憶域を予測可能に (事前に) 割り当て、配列などの連続したメモリ セグメントでインデックスを付けることができます。
  • 「ネイティブ ワード サイズ」のハッシュ、たとえば 16、32、および 64 ビットの整数値の場合、非常に高速な等価比較と順序比較を行うことができます。
  • ハッシュ値を扱うアルゴリズムはどれも、ハッシュ値の生成と処理に単一の固定サイズ操作セットを使用できます。
  • ブルームフィルターなどで、異なるハッシュ関数で生成されたハッシュを予想どおりに組み合わせることができます。
  • ハッシュ値の大きさをエンコードするためにスペースを無駄にする必要はありません。

いわゆるスポンジ関数など、指定された固定長の出力ハッシュを生成できる特別なハッシュ関数が存在します。

于 2015-04-13T06:43:32.927 に答える