MD5アルゴリズムの暗号化プロセス

MD5アルゴリズムの暗号化プロセス

MD5とは何か

MD5 はアルゴリズムです。MD5 の MD はMessage Digest の略です。

5 については、以前の MD4 アルゴリズムが改良されたため、MD5 と名付けられています。

MD5 はメッセージ ダイジェスト アルゴリズムの 5 番目のバージョンです。

メッセージダイジェストアルゴリズムとは何ですか?

では、メッセージ ダイジェスト アルゴリズムとは何でしょうか? 本質的にはハッシュ関数です。

ハッシュ関数とも呼ばれます。

では、ハッシュ関数とは何でしょうか? ハッシュ関数とは、任意のサイズのデータ​​を固定サイズの値にマッピングできる関数を指します。

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

ハッシュ関数によって返される値は、ハッシュ値ハッシュ コード、または単にハッシュとも呼ばれます。

具体例

このように単純に話すと少し抽象的なので、具体的な例を挙げて説明します。Java を例にとると、MD5 は次のように計算できます。

  1. パブリックvoid rawMd5() は NoSuchAlgorithmException をスローします {
  2. byte[] バイト = "hello" .getBytes(StandardCharsets.UTF_8);
  3. メッセージダイジェスト md = MessageDigest.getInstance( "MD5" );
  4. byte[] md5 = md.digest(バイト);
  5. }

注: ダイジェスト計算の入力はバイト配列であるため、文字列のダイジェスト値を計算する場合は、何らかのエンコードのバイト配列に変換する必要があります。一貫性を保つために、常に 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 進数で表すと次のようになります。

  1. 単語A: 01 23 45 67
  2. 単語B: 89 ab dc ed
  3. 単語C: fe dc ba 98
  4. 単語D: 76 54 32 10

4.メッセージの処理

まず 4 つのヘルパー関数を定義する必要があります。

  1. F(X,Y,Z) = XY 対(X) Zではない
  2. G(X,Y,Z) = XZ v Y ではなく(Z)
  3. H(X,Y,Z) = X xor Y xor Z
  4. I(X,Y,Z) = Y xor (X 対(Z)ではない)

関数 F の場合、各ビットにおいて、関数 F はセレクターのようになります。つまり、X の場合は Y、それ以外の場合は Z です。

このステップでは、sin関数から構築された長さ64のテーブルT[1...64]が必要です。 T[i]はabs(sin(i))を4294967296回実行した結果です。

処理が必要です

  1. /* 元のデータを処理します。 */
  2. i = 0からN/16-1までの場合
  3. /* Xにデータを割り当てます。 */
  4. j = 0から15までの場合
  5. X[j]をM[i*16+j]設定します
  6. end /* jのループを終了します */
  7. /* A を AA、B を BB、C を CC、D を DD として保存します */
  8. AA = あ
  9. BB = B
  10. CC = C
  11. DD = D
  12. /* 最初の操作ラウンド */
  13. /* [abcd k s i]は次の操作を示します
  14. a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
  15. [ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
  16. [ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
  17. [ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
  18. [ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]
  19. /* 2回目の操作 */
  20. /* [abcd k s i]は次の操作を示します
  21. a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
  22. [ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
  23. [ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
  24. [ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
  25. [ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
  26. /* 3回目の操作 */
  27. /* [abcd k s t]は次の操作を示します
  28. a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
  29. [ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
  30. [ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
  31. [ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
  32. [ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
  33. /* 4回目の操作 */
  34. /* [abcd k s t]は次の操作を示します
  35. a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
  36. [ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
  37. [ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
  38. [ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
  39. [ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
  40. A = A + A A です
  41. B = B + B = ...
  42. C = C + C C
  43. D = D + D D
  44. end /* i のループを終了します */

5.出力

前のステップでは、最終結果 A、B、C、D が出力されます。 A の下位バイトから始まり、D の上位バイトで終わります。各バイトは 32 ビットで、最終的な連結結果は 4*32 = 128 ビットとなり、これが MD5 解決の結果です。

<<:  AI軍はすでに門を叩いているが、失業はどのくらい先にあるのだろうか?

>>:  推奨される 5 つのオープンソースオンライン機械学習環境

ブログ    
ブログ    
ブログ    

推薦する

世界のトラフィック量上位50のAIウェブサイトが発表:ChatGPTなどの会話型製品が目立ち、ユーザーは主にライトな体験を利用

米国のベンチャーキャピタル企業a16zは10月9日、Cエンドユーザーに公開されている現在市場に出回っ...

知らないのに知っているふりをしないでください!機械学習とディープラーニングを理解しましたか?

機械学習とディープラーニングは人工知能の分野に属しますが、両者の間には大きな違いがあります。これら ...

比較ベースのアルゴリズムでは、5 つの要素をソートするのに 7 回のパスが必要だと言われるのはなぜですか?

結果のソートアルゴリズムの唯一の要件は、オペランドが全順序関係を満たすことです。 a≤b かつ b≤...

この記事では人工知能とは何かを徹底的に解説します!

人工知能 (AI) は、自然科学のさまざまな分野を網羅しており、主に特定の種類の知的な人間の活動をモ...

2020 年の企業向け最高の AI プラットフォーム

企業は長年にわたり、業務と分析を手作業で処理してきましたが、その結果、人件費と事務処理が増加し、最適...

アルゴリズム取引システム用のデータベースはどのように選択すればよいでしょうか?

[[314073]]あらゆるソフトウェア システムの重要なコンポーネントは、データを保存、取得、分...

人工知能の未来を説明する15の統計

[[206292]]人工知能は非常に人気があり、それに対して楽観的な人もいれば、悲観的な人もいます。...

コンテキストの長さを 256k に拡張すると、LongLLaMA の無限コンテキスト バージョンが登場しますか?

今年2月、MetaはLLaMA大規模言語モデルシリーズをリリースし、オープンソースチャットボットの開...

強化学習とマルチタスク推奨

1. 短編動画推薦のための2段階制約強化学習アルゴリズム最初に紹介する研究は、Kuaishou が開...

人工知能の急速な発展により、小売業界は第5の変革期を迎えている。

[[252330]]人工知能の急速な発展は、新しい小売業者に力を与え、小売業界の「人、商品、場所」...

これがあれば、母は私が授業をさぼったり、空想にふけったり、携帯電話で遊んだりすることを心配する必要がなくなります...

最近、中国薬科大学は試験的に教室に顔認識システムを導入しました。学生の出席を自動的に識別するだけでな...

ガートナー: データサイエンスと機械学習の未来に影響を与える 5 つのトレンド

Gartner, Inc. は、人工知能のデータ需要を満たすために急速に進化している分野であるデータ...

このAIはガールフレンドの自撮りを手伝います: 写真から3D動画を生成

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

AI ナンバープレート認識 ANPR テクノロジーは人類にどのようなメリットをもたらしますか?

調査によると、世界のANPRシステム市場は2021年から2023年の間に年間9.6%成長すると予想さ...

...