アルゴリズムのハッシュ


文書ディレクトリ
  • ハッシュアルゴリズム
  • とは
  • ハッシュアルゴリズムの応用
  • セキュリティ暗号化
  • ユニークID
  • ハッシュ関数
  • ハッシュアルゴリズムは歴史が古く、MD 5、SHAなど、業界で有名なハッシュアルゴリズムもたくさんあります.開発では、基本的には既製のものを直接使う.
    ハッシュアルゴリズムとは
    「ハッシュ」であれ「ハッシュ」であれ、これは中国語の翻訳の違いであり、英語は実は「Hash」である.ハッシュアルゴリズムの定義:任意の長さのバイナリ値列は固定長のバイナリ値列にマッピングされ、このマッピングの規則はハッシュアルゴリズムであり、元のデータマッピング後に得られるバイナリ値列はハッシュ値である.ハッシュアルゴリズムは、以下の要件を満たす必要があります.
    1:ハッシュ値から元のデータを逆方向に導出できない(したがって、ハッシュアルゴリズムは一方向ハッシュアルゴリズムとも呼ばれる).2:入力データに非常に敏感で、元のデータがBitを1つだけ修正しても、最後に得られるハッシュ値は大きく異なります.3:ハッシュ競合の確率は小さく、異なる元のデータに対してハッシュ値が同じ確率は非常に小さい.4:ハッシュアルゴリズムの実行効率はできるだけ効率的で、長いテキストに対してもハッシュ値を迅速に計算することができます.
    MD 5暗号化アルゴリズムで説明すると、「ハッシュアルゴリズム」と「jiajia」の2つのテキストについて、MD 5ハッシュ値を計算し、不規則に見える2つの文字列が得られる.ハッシュされるテキストがどれだけ長く、どれだけ短くても、MD 5ハッシュを通過した後、得られるハッシュ値の長さは同じであり、得られるハッシュ値はランダム数のように見え、全く規則的ではないことがわかる.
    MD5("    ") = bb4767201ad42c74e650c1b6c03d78fa
    MD5("jiajia") = cd611a31ea969b908932d44d126d195b
    

    2つの非常に似たテキスト、「ハッシュアルゴリズム!」と「ハッシュアルゴリズム」です.この2つのテキストには感嘆符の違いが1つしかありません.MD 5ハッシュアルゴリズムを用いてそれぞれハッシュ値を計算すると、一字の差にもかかわらず、得られたハッシュ値は全く異なることがわかります.
    MD5("    !") = 425f0d5a917188d2c3c3dc85b5e4f2cb
    MD5("    ") = a1fb91ac128e6aa37fe42c663971ac3d
    

    ハッシュアルゴリズムの応用
    ハッシュアルゴリズムの応用は非常に多く,最も一般的なのはセキュリティ暗号化,一意識別,データ検証,ハッシュ関数などである.
    安全な暗号化
    暗号化に最もよく用いられるハッシュアルゴリズムはMD 5(MD 5 Message-Digest Algorithm,MD 5メッセージ要約アルゴリズム)とSHA(Secure Hash Algorithm,セキュアハッシュアルゴリズム)である.
    暗号化に使用されるハッシュアルゴリズムには、特に重要な2つの点があります.1つ目はハッシュ値に基づいて元のデータを逆方向に導出することが困難であり,2つ目はハッシュ競合の確率が小さい.暗号化の目的は元のデータの漏洩を防止することであるため,ハッシュ値から元のデータを逆方向に導くことは困難であり,これは最も基本的な要求である.どんなハッシュアルゴリズムでも、衝突の確率をできるだけ減らすしかありません.**理論的には完全に衝突しないことはできません.**これはなぜですか.
    まず例を見てみましょう.ハトの巣が10個、ハトが11羽あれば、ハトの巣の中のハトの数が1個より多いに違いありません.言い換えれば、ハトが2羽、ハトの巣の中にいるに違いありません.(ハトの巣の原理)
    なぜハッシュアルゴリズムは衝突をゼロにできないのですか?ハッシュアルゴリズムによって生成されるハッシュ値の長さは固定で有限である.例えば、先に挙げたMD 5の例では、ハッシュ値は固定された128ビットのバイナリ列であり、表すことができるデータは限られており、最大2^128個のデータを表すことができ、ハッシュするデータは無限である.ハトの巣の原理に基づいて,2^128+1個のデータに対してハッシュ値を求めると,ハッシュ値が同じ場合が必然的に存在する.したがって,一般にハッシュ値が長いハッシュアルゴリズムほどハッシュ競合の確率は低い.しかし,ハッシュアルゴリズムにハッシュ競合が存在する場合でも,ハッシュ値の範囲が大きく,競合の確率が極めて低いため,相対的に解読しにくい.
    ユニークID
    大量のライブラリで、1枚の図が存在するかどうかを検索する場合は、単純に画像のメタ情報(例えば、画像名)で比較することはできません.名前は同じですが、画像の内容が異なる場合や、名前が異なる画像の内容が同じ場合がある可能性があります.どうやって検索すればいいのでしょうか?各ピクチャに一意の識別子、または情報の要約を付けることができます.例えば、ピクチャのバイナリ符号列の先頭から100バイトを取り、中間から100バイトを取り、最後から100バイトを取り、この300バイトをブロックに置き、ハッシュアルゴリズム(例えばMD 5)により、ピクチャの一意の識別としてハッシュ文字列を得ることができる.この一意の識別子により、ピクチャがライブラリにあるか否かを判定する.
    ハッシュ関数
    ハッシュ関数は、ハッシュ・リストを設計する鍵です.ハッシュ競合の確率とハッシュ・リストのパフォーマンスを直接決定します.しかし,ハッシュアルゴリズムの他の応用に比べて,ハッシュ関数はハッシュアルゴリズムの衝突に対する要求がはるかに低い.個別のハッシュ競合が発生しても、あまり深刻でない限り、オープンアドレス法またはチェーンテーブル法によって解決できます.