MD5とは何か MD5 はアルゴリズムです。MD5 の MD はMessage Digest の略です。 5 については、以前の MD4 アルゴリズムが改良されたため、MD5 と名付けられています。 MD5 はメッセージ ダイジェスト アルゴリズムの 5 番目のバージョンです。 メッセージダイジェストアルゴリズムとは何ですか? では、メッセージ ダイジェスト アルゴリズムとは何でしょうか? 本質的にはハッシュ関数です。 ハッシュ関数とも呼ばれます。 では、ハッシュ関数とは何でしょうか? ハッシュ関数とは、任意のサイズのデータを固定サイズの値にマッピングできる関数を指します。 ハッシュ関数は、任意のサイズのデータを固定サイズの値にマッピングするために使用できる関数です。 ハッシュ関数によって返される値は、ハッシュ値、ハッシュ コード、または単にハッシュとも呼ばれます。 具体例 このように単純に話すと少し抽象的なので、具体的な例を挙げて説明します。Java を例にとると、MD5 は次のように計算できます。
注: ダイジェスト計算の入力はバイト配列であるため、文字列のダイジェスト値を計算する場合は、何らかのエンコードのバイト配列に変換する必要があります。一貫性を保つために、常に utf-8 などの同じエンコードを明示的に使用する必要があります。 上記のコードから、MD5 関数の入力と出力は両方ともバイト配列 byte[] であることがわかります。 コードに直接反映されていない点の 1 つは、入力は任意のサイズのバイト配列にすることができますが、出力は固定サイズのバイト配列であるということです。 MD5 アルゴリズムの場合、出力値は固定サイズの 16 バイト配列です。各バイトは 8 ビットなので、最終的な出力値は 16 × 8 = 128 ビットの 2 進数になります。MD5 の値は 128 ビットの 2 進整数です。 たとえば、次の MD5 値は、元の 128 ビット バイナリ形式で表現されます。10001000100100011001000111110000100011111000000111010010110010101000101111010100001100110111110000111011111011001111110110011011111110110011011111110 この MD5 値は、実際には私の Web サイトのドメイン名 xiaogd.net を解析した結果です。 この値の 2 進形式は非常に長いため、通常は 16 個のグループ (88 91 91 f0 8f 81 d2 ca c5 ea 19 bc 3b f7 d9 be) を持つ 16 進形式に変換されます。それでも非常に長いですが、2 進数よりははるかに優れています。 ちなみに、IPv6 アドレスも 128 ビットなので、これも異常に長いです。16 進数で書いても、非常に長くて覚えにくいです... 最後に、通常はスペースが削除され、コンパクトな 32 文字の文字列 (889191f08f81d2cac5ea19bc3bf7d9be) に書き込まれます。これが最も一般的な MD5 値形式です。 ただし、誤解しないでください。MD5 値は文字列ではなく、すべての文字が含まれるわけではありません。 用語とコンプライアンスこの記事では、「ワード」は 32 ビット、「バイト」は 8 ビットです。 x_i は「x マイナス I」を表すものとして定義します。減数が式である場合は、x_{i+1} のように括弧で囲みます。同様に、指数を表すために ^ を使用します。つまり、x^i は x の i 乗を表します。 「+」は「ワード」の加算を表し、X<<< sはXをsビット左にシフトしたことを表し、not(X)はXのビット補数演算を表し、X v YはビットOR演算を表します。 X xor Y はビット単位の排他的論理和を意味し、XY はビット単位の論理積を意味します。 MD5アルゴリズムの説明入力として b ビット長のメッセージがあると仮定し、その要約情報を計算します。 b は負でない整数です。b は 0 の場合もあります。8 の倍数である必要はなく、非常に大きい値でもかまいません。入力情報については以下のように説明します。 m_0 m_1 .. m_{b-1} 次の 5 つのステップでその要約を計算します。 1.充填 入力を 448 を法として 512 の長さにパディングします。入力メッセージの長さに関係なく、長さが 512 から 448 までの条件を満たす場合でも、パディングは常に発生します。 プロセスは次のとおりです。 入力情報の後に「1」ビットが追加され、入力情報の長さが 448 を法として 512 を満たすように、残りの部分に「0」ビットが追加されます。一般的には、少なくとも 1 ビットが追加され、最大 512 ビットが追加されます。 例: 66 2.補足データ長 入力情報 b は 64 ビットで表され、パディングされたデータに追加されます。b が 2^64 より大きい場合は、下位 64 ビットのみが取得されます。 この時点で、処理結果はちょうど 512 の倍数で、16 語の倍数に相当します。この結果を表すには M[0...N-1] を使用します。ここで、N は 16 の倍数です。 3. MDバッファを初期化する メッセージ ダイジェストを計算するには、4 ワード バッファー (A、B、C、D) を使用します。ここで、A、B、C、D はそれぞれ 32 ビット レジスタです。これらのレジスタの初期値は、下位バイトを先頭として 16 進数で表すと次のようになります。
4.メッセージの処理 まず 4 つのヘルパー関数を定義する必要があります。
関数 F の場合、各ビットにおいて、関数 F はセレクターのようになります。つまり、X の場合は Y、それ以外の場合は Z です。 このステップでは、sin関数から構築された長さ64のテーブルT[1...64]が必要です。 T[i]はabs(sin(i))を4294967296回実行した結果です。 処理が必要です
5.出力 前のステップでは、最終結果 A、B、C、D が出力されます。 A の下位バイトから始まり、D の上位バイトで終わります。各バイトは 32 ビットで、最終的な連結結果は 4*32 = 128 ビットとなり、これが MD5 解決の結果です。 |
<<: AI軍はすでに門を叩いているが、失業はどのくらい先にあるのだろうか?
>>: 推奨される 5 つのオープンソースオンライン機械学習環境
人工知能は新たなインフラの一つとして、人々の社会生活のあらゆる分野に統合され、あらゆるものがつながり...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
負荷分散技術は現在ではどこにでもありますが、基本的にはまだ使用段階であり、その核心は十分に理解されて...
AI はすべての問題を解決できるわけではありませんが、正しく適用すれば短期間で大きな変化をもたらすこ...
[[431125]]自動車金融サービスの分野では、ディーラーと顧客が意思決定のスピードを追求していま...
ウォルマートの創業者サム・ウォルトンはよく「私たちの人材が違いを生み出す」と言っていましたが、この言...
[[351445]]最近、クレジットカード会社からデータ漏洩に関する連絡がありましたか? あるいは...
ゲスト | 張潔インタビュー | 張小南編集者 | 徐潔成制作:51CTO テクノロジースタック(W...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
Google トレンドを使ったことがありますか? かなり便利です。キーワードをいくつか入力すると、G...
2021年に入ってから、自動運転分野の開発は着実に進展しており、4月には自動運転関連のさまざまな動き...
友達、この英語の単語が何だか知っていますか?超微細珪火山性肺炎。これは45文字からなる世界最長の単語...
農業、工業、情報、知能、社会は常に進歩しています。長い発展の過程で、生産手段と生産ツールは常に変化し...