<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// この部分は、記事の内容とは何の関係もありません,サンプルコードまたは説明を配置できます</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"この記事を読んでください\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"この記事では主に説明します PHP md5 生成された関数 32 ビット文字列の意味と構造\n"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-comment"># PHP md5 生成された関数 32 少し文字列は何を表していますか??意味と構造の詳細な説明</span></span><span>
存在する PHP 真ん中,`</span><span><span class="hljs-title function_ invoke__">md5</span></span><span>()` 関数は、データのハッシュ値を生成するために広く使用されています。很多开发者存在する看到 `</span><span><span class="hljs-title function_ invoke__">md5</span></span><span>()` 返された </span><span><span class="hljs-number">32</span></span><span> ビット文字列,それが何を表しているのか興味があります,その構造と意味は何ですか?。この記事では、この問題を詳細に分析します。
</span><span><span class="hljs-comment">## 1つ、MD5 関数の概要</span></span><span>
MD5(Message Digest Algorithm </span><span><span class="hljs-number">5</span></span><span>)是1つ种哈希函数,任意の長さの入力データを固定長の出力にマッピングできます,今すぐ </span><span><span class="hljs-number">128</span></span><span> 少し(</span><span><span class="hljs-number">16</span></span><span> バイト)ハッシュ値。存在する PHP 真ん中,`</span><span><span class="hljs-title function_ invoke__">md5</span></span><span>()` 函数默认返回1つ个 </span><span><span class="hljs-number">32</span></span><span> 少し的十六进制字符串。
```php
</span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-variable">$hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">md5</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$hash</span></span><span>; </span><span><span class="hljs-comment">// 出力: fc3ff98e8c6a0d3087d515c0473f8677</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
ここに戻った「FC3FF98E8C6A0D3087D515C0473F8677」は、 MD5の16進表現です。
固定長:MD5の出力は、入力がどれだけ長くても、128ビット、つまり16バイト固定されています。 PHPは16進表現を使用し、各バイトは2文字で表されるため、32文字になります。
16進表現:各文字の値の範囲は0-9およびAFです。たとえば、 FC3FF98EのFはバイナリ1111を表し、 Cはバイナリ1100を表します。
一意性(理論):MD5ハッシュ値は通常、異なる入力データで異なりますが、ハッシュ衝突の可能性があるため(理論的2^128の組み合わせ)、絶対に一意であることは保証されていません。
容認性:MD5は一方向のハッシュ関数であり、元のデータをハッシュ値を介して直接復元することはできません。
MD5の計算プロセスは、ほぼ次のとおりです。
データの入力:元のメッセージを512ビットの倍数に記入し、最後にメッセージの長さを追加します。
バッファの初期化:4 32ビットレジスタA、B、C、およびDで初期化
ブロックイテレーション:メッセージを512ビットブロックに分割し、各ブロックが64回の反復後にレジスタを更新します。
出力ハッシュ:最後に、4つのレジスタの値が128ビットのハッシュ値に結合され、32ビットヘキサデシマルストリングに変換されます。
MD5は、セキュリティの問題(衝突が発生しやすい)のためにパスワードストレージには適していませんが、以下に使用されています。
ファイルの整合性検証
単純なデータ署名
ユニークなアイデンティティ生成(URLハッシュなど)
例:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$filename</span></span><span> = </span><span><span class="hljs-string">"example.txt"</span></span><span>;
</span><span><span class="hljs-variable">$hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">md5_file</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"提出 MD5 価値: <span class="hljs-subst">$hash</span></span></span><span>";
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
PHPのMD5()関数は、128ビットのバイナリハッシュ値を表す32ビット16進数文字列を返します。
それは不可逆的で固定された長さであり、理論的にユニークです。
データの充填、反復、レジスタを通じて内部的に計算されます。
セキュリティは限られていますが、ファイルチェックサム識別の生成にはまだ価値があります。
MD5の構造と意味を理解することにより、開発者はセキュリティ要件が高いシナリオに使用することを避けながら、より合理的に使用できます。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// この部分は、記事の内容とは何の関係もありません,可以放1つ些演示或提示</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"\n記事は読まれました,ありがとう!\n"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>