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 つのオープンソースオンライン機械学習環境

ブログ    

推薦する

機械学習が医療に革命を起こす

その中で、ヘルスケア業界は強力なスポンサーであり、新しいテクノロジーを積極的に導入してきました。人工...

アマゾンのドローン配送部門の主要メンバーが目標未達成で辞任

アマゾンのドローン配送部門プライムエアで安全、飛行運用、規制業務を担当していたショーン・キャシディ氏...

可観測性はAIの成功の重要な要素の一つである

ますます多くの企業が自社のインフラストラクチャやビジネス プロセスに人工知能を統合するにつれて、シス...

5GとエッジAI: トラフィック管理問題の解決

通勤方法は時代とともに変化してきたかもしれませんが、交通管理の方法は変わっていません。 INRIX世...

世界人工知能会議が開幕。ジャック・マー、ロビン・リー、イーロン・マスクらは何を語ったのか?

昨日、第3回世界人工知能大会が予定通り開催され、ジャック・マー氏、ロビン・リー氏、任宇新氏など国内の...

人工知能は若者を失業させるでしょうか? 996に圧倒されないでください。そうしないとチャンスがなくなります。

教育部が2019年3月に発表した新規登録学部専攻を例にとると、最も人気のある専攻は人工知能です。上海...

TorchCVは、北京大学の学生が開発したPyTorchベースのCVモデルフレームワークです。

機械学習によってもたらされたあらゆる破壊的技術の中でも、コンピュータービジョンの分野は業界関係者と学...

...

プログラマーアルゴリズムの基礎 - 貪欲アルゴリズム

序文貪欲は人間が本来持つ能力であり、貪欲アルゴリズムとは貪欲な意思決定に基づいた全体計画の総称です。...

中国聯通の専門家:5Gは5つの側面からAIを取り入れるべき

5Gは大規模なアンテナシステムと超高密度ネットワーク技術を採用し、スペクトル共有やD2Dなどの複雑な...

機械が壁の建設を手伝うことがなぜそんなに難しいのでしょうか?これは人類の100年にわたる闘争の歴史である

[[418716]]建築の問題を研究すると、ほぼすべての「新しい」アイデアが、おそらく何十年も前に何...

...

Xing Bo 氏のチームの LLM360 は、大規模なモデルを真に透明化する総合的なオープンソース プロジェクトです。

オープンソース モデルは、数だけでなくパフォーマンスも増加しており、活発な活力を示しています。チュー...

DeepMind のニューラル ネットワーク記憶研究を分析: 動物の脳をシミュレートして継続的な学習を実現する

1. はじめにインターネットに溢れる AI 関連の情報の大半は、一般の人向けに進歩を説明するものと、...

人工知能搭載の携帯電話は私たちの生活をどのように変えるのでしょうか? 携帯電話メーカーが何をしてきたか見てみましょう。

チャットができる「インテリジェント音声アシスタント」から、さまざまな家電を操作できるスマートスピーカ...