検索
ホームページテクノロジー周辺機器AIハッシュ アルゴリズムとアプリケーション シナリオを 1 つの記事で理解する

ハッシュ アルゴリズムとアプリケーション シナリオを 1 つの記事で理解する

Apr 13, 2023 am 11:55 AM
ハッシュアルゴリズム大きなファイルhash

1. ハッシュ アルゴリズムとは

ハッシュとハッシュは両方ともハッシュという単語に由来しており、前者は音訳、後者は意訳です。任意の長さのバイナリ値を固定長のバイナリ値にマッピングできるアルゴリズムで、マッピングされた固定長のバイナリ値をハッシュ値と呼びます。優れたハッシュ アルゴリズムは次の要件を満たす必要があります:

はハッシュ値から元のデータを逆に推定できない;

は入力データの影響を非常に受けやすく、ビットが異なるとハッシュが発生します。ハッシュ値は大きく異なります;

ハッシュ競合の可能性は非常に小さくなければなりません;

ハッシュ アルゴリズムの計算プロセスは単純かつ十分に効率的でなければなりません。元のデータは非常に長いため、ハッシュ値をすぐに取得できます ハッシュ値;

2. ハッシュ アルゴリズムの使用シナリオ

2.1 安全な暗号化

より一般的なハッシュ暗号化アルゴリズムMD5 (MD5 Message-Digest Algorithm、MD5 メッセージ ダイジェスト アルゴリズム) と SHA (Secure Hash Algorithm、セキュア ハッシュ アルゴリズム) です。

ハッシュ値暗号文からは平文パスワードが推定できないこと、ハッシュ衝突の可能性が比較的低いこと、この2点によりハッシュアルゴリズムは安全な暗号化方式としての信頼性が確保されています。

なぜハッシュ アルゴリズムはハッシュの競合を完全に回避することはできず、ハッシュの競合を最小限に抑えることしかできないのですか?

鳩の巣の原則は、11 羽の鳩が 10 の鳩かごに飛ぶ場合、1 つの鳩かごには 2 羽以上の鳩がなければならないことを示しています。この場合、ハッシュ値は固定長であるため、ハッシュ値を使い果たすことができると判断されますが、理論上、元のデータは無限であるため、ハッシュの競合が発生する可能性があります。

このアプリケーション シナリオでは、ハッシュ アルゴリズムの特性 1 と 3 を使用します。このうち 3 は、パスワードが順方向に解読されるのが非常に困難であることを保証します (MD5 を例にとると、ハッシュ値の長さは128 ビット、2 ^128 の異なるハッシュがあり、解読するのは非常に困難です)。

セキュリティ分野に絶対的なセキュリティはありません。MD5 を解読するのは困難ですが、それを解読する方法はまだあります。たとえば、レインボー テーブル マッチングを使用すると、一般的なパスワードを簡単に解読できます。

したがって、一般的に、安全な暗号化にはソルテッド ハッシュ アルゴリズムを使用します。ソルティング方法は厳重に機密に保つ必要があり、クラッキングの難易度とコストが大幅に増加します。

2.2 固有フラグ

2つのファイルが同一かどうかを検証する場合、単純にファイル名だけでは判断できません。同じ名前のファイルが存在することがあまりにも一般的であるためです。

特定のルールに従って大きなファイルからバイナリ データを取得し、ハッシュ アルゴリズムを使用してファイルの一意の識別子としてハッシュ値を取得できます。このように、同じファイルは同じハッシュ値、つまり同じ一意の識別子を持つ必要があります。異なるファイルは異なるハッシュ値の一意の識別子を持つ可能性が高くなります。

たとえ本当に散在する If に遭遇したとしても列の競合がある場合は、2 つのファイルのすべてのバイナリ データを詳細に比較して、それらが同じファイルであるかどうかをさらに判断できますが、このイベントが発生する確率は非常に低いです。ただし、このソリューションでは効率と信頼性の両方が保証されます。

このアプリケーション シナリオでは、ハッシュ アルゴリズムの機能 2 と 3 を使用します。

2.3 データ検証

P2P ダウンロード プロトコルでは、同じムービーの異なる部分を異なるマシンからダウンロードし、自分のマシン上でムービーを組み立てます。動画の一部のダウンロード処理にエラーが発生したり、コンテンツが改ざんされたりすると、ダウンロードエラーやウイルスの原因となる可能性があります。

したがって、最初にすべての部分に対してハッシュ計算を実行し、シード ファイルに保存します。すべてのパーツがダウンロードされたら、すべてのパーツをハッシュしてハッシュ値を取得し、それをシード ファイル内のハッシュ値と比較して、ファイルが完全であるかどうかを確認します。

このアプリケーション シナリオでは、ハッシュ アルゴリズムの機能 2 と 4 を使用します。

2.4 ハッシュ関数

このシナリオは、ハッシュ テーブルについて説明するときに以前に紹介されました。このシナリオでは、機能 1 の要件はそれほど高くありません。機能 2 の要件は、ハッシュ値が可能な限り均等に分散されることです。機能 3 は、ある程度の競合を許容することもできます。これは次のように解決できます。オープンアドレッシング方式とジッパー方式を使用し、機能4はより要求が厳しく、パフォーマンスを追求する必要があります。

2.5 負荷分散アルゴリズム

ポーリング、ランダム、加重ポーリングなど、多くの負荷分散アルゴリズムがありますが、目標は、セッション固定負荷分散アルゴリズムを実装することです。同じ セッション中のすべてのクライアント要求は同じサーバーにルーティングされます。

クライアントの IP またはセッション ID をハッシュし、ハッシュ値とサーバーの数に対してモジュロ演算を実行できます。最終的な値は、ルーティングが必要なサーバーであるため、セッションの持続性を実現できます。目的停滞の。

2.6 データシャーディング

大量のデータを処理する必要がある場合、単一のサーバーではそのような大量のデータを読み込んで計算することはできません。その場合、大量のデータを N 台のサーバーに均等に分散する必要があります。サーバーは並列実行します。データを N 個のサーバーに均等に分散するにはどうすればよいですか?

データに対してハッシュ計算を実行し、取得したハッシュ値をサーバー数 N で割って使用します。同じ結果のデータは同じサーバーに割り当てられ、このサーバーに渡されて処理されます。 N 台のサーバーが大量のデータを並列処理し、最終的に結果をマージします。

2.7 分散ストレージ

大量のデータを分散キャッシュまたは分散データベースに保存する借用の考え方は、上記のデータ シャーディングと似ています。しかし、最初に設定したサーバーの数が足りない場合はどうすればよいでしょうか。

この問題は、マシンを数台追加するだけでは解決できません。これにより、ハッシュ値のモジュロ演算が破壊され、キャッシュの侵入が発生し、雪崩現象が発生します。同様に、マシンの障害が解消されたときにも同じ問題が発生する可能性があります。現時点では、この問題を解決するには一貫したハッシュ アルゴリズムを使用する必要があります。

一貫性のあるハッシュ アルゴリズムは、リング上に 2^32 のノードを含むハッシュ リングを構築し、サーバー IP とファイルを対応するノードにハッシュするだけです。すべてのファイルが時計回りに最初に遭遇するサーバーが、ファイルが保存されているサーバーです。このようにして、サーバーが追加または削除されたときに、影響を受けるファイルの数を制御でき、グローバルな雪崩を引き起こすことはありません。

ハッシュ アルゴリズムとアプリケーション シナリオを 1 つの記事で理解する

ハッシュリング

しかし、サーバーIPがハッシュリングにマッピングされると、一定の確率でハッシュリングスキューの問題が発生します。これにより、サーバー上のファイルの分散が非常に不均一になり、最初にサーバーを追加または削除するときに簡単に雪崩現象が発生するシナリオに陥ります。

ハッシュ アルゴリズムとアプリケーション シナリオを 1 つの記事で理解する

ハッシュ リングの歪度

これらのサーバーに多数の仮想ノードを人為的に追加して、すべてのサーバー ノードがハッシュ上に均等に分散されるようにすることができます。指輪。

ハッシュ アルゴリズムとアプリケーション シナリオを 1 つの記事で理解する

仮想ノードを使用したハッシュ リング

3. 概要

ハッシュ アルゴリズムの使用シナリオは上記以外にも多数あります。 CRCチェックなども。

以上がハッシュ アルゴリズムとアプリケーション シナリオを 1 つの記事で理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は51CTO.COMで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
大規模な言語モデルでの毒性の評価大規模な言語モデルでの毒性の評価Apr 24, 2025 am 10:14 AM

この記事では、大規模な言語モデル(LLM)における毒性の重要な問題と、それを評価して軽減するために使用される方法について説明します。 LLMSは、チャットボットからコンテンツ生成までさまざまなアプリケーションを電力を供給し、堅牢な評価メトリック、ウィットを必要とします

RagのRerankerに関する包括的なガイドRagのRerankerに関する包括的なガイドApr 24, 2025 am 10:10 AM

検索拡張生成(RAG)システムは情報アクセスを変換していますが、その有効性は取得データの品質にかかっています。 これは、再審査員が重要になる場所です。

Gemma 3とDoclingでマルチモーダルラグを構築する方法は?Gemma 3とDoclingでマルチモーダルラグを構築する方法は?Apr 24, 2025 am 10:04 AM

このチュートリアルでは、Google Colab内に洗練されたマルチモーダル検索の高性化(RAG)パイプラインを構築することを紹介します。 Gemma 3(言語とビジョンのため)、Docling(Document Conversion)、Langchainなどの最先端のツールを利用します

スケーラブルなAIおよび機械学習アプリケーションのためのRayへのガイドスケーラブルなAIおよび機械学習アプリケーションのためのRayへのガイドApr 24, 2025 am 10:01 AM

レイ:AIおよびPythonアプリケーションをスケーリングするための強力なフレームワーク Rayは、AIおよびPythonアプリケーションを簡単にスケーリングするように設計された革新的なオープンソースフレームワークです。 その直感的なAPIを使用すると、研究者と開発者がコードを移行することができます

建築エージェントにOpenai MCP統合を使用する方法は?建築エージェントにOpenai MCP統合を使用する方法は?Apr 24, 2025 am 09:58 AM

OpenAIは、人類のモデルコンテキストプロトコル(MCP)をサポートすることにより、相互運用性を採用しています。これは、多様なデータシステムとのAIアシスタント統合を簡素化するオープンソース標準である。このコラボレーションは、AIアプリケーションのEFFへの統一されたフレームワークを促進します

Cache-age-agemanted Generation(CAG):ラグよりも優れていますか?Cache-age-agemanted Generation(CAG):ラグよりも優れていますか?Apr 24, 2025 am 09:54 AM

Cache-Age-generated Generation(CAG):ラグに代わるより速く、より効率的な代替 検索された生成(RAG)は、外部知識を動的に組み込むことによりAIに革命をもたらしました。ただし、外部ソースへの依存により、遅延が導入されます

ルージュ:機械で生成されたテキストの品質を解読しますルージュ:機械で生成されたテキストの品質を解読しますApr 24, 2025 am 09:49 AM

大規模な言語モデルの評価:ルージュメトリックに深く潜る 詩を作曲したり、法的文書を起草したり、複雑な研究​​を要約できるAIを想像してください。 パフォーマンスを客観的に評価するにはどうすればよいですか? 大規模な言語モデル(LLMS)Inc

MCPの使用方法:モデルコンテキストプロトコル - 分析VidhyaMCPの使用方法:モデルコンテキストプロトコル - 分析VidhyaApr 24, 2025 am 09:48 AM

モデルコンテキストプロトコル(MCP)を使用して、AIアシスタントの実際のデータのパワーのロックを解除します! LLMSを使用してアプリケーションを構築し、エージェントで実験し、おそらくLangchain、Autogen、またはOpenaiのアシスタントAPIを利用した可能性もあります。 印象的なa

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。