PHPでは、 bin2hexとopenssl_encryptは、バイナリデータを16進表現に変換してデータを暗号化するために使用される2つの非常に有用な関数です。この記事では、これら2つの関数を一緒に使用して実際の暗号化の例を提供する方法について説明します。
BIN2HEXは、バイナリデータ(通常は文字列または他のデータ)を16進形式の文字列に変換するPHPに組み込まれた機能です。たとえば、バイトデータを安全に保存および送信できる16進表現に変換します。
例:
<span><span><span class="hljs-variable">$binary_data</span></span><span> = </span><span><span class="hljs-string">"hello"</span></span><span>;
</span><span><span class="hljs-variable">$hex_data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">bin2hex</span></span><span>(</span><span><span class="hljs-variable">$binary_data</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$hex_data</span></span><span>; </span><span><span class="hljs-comment">// 出力:68656c6c6f</span></span><span>
</span></span>OpenSSL_ENCRYPTは、OpenSSLライブラリを使用してデータを暗号化する強力な暗号化関数です。この関数は、AES、DES、ブローフィッシュなどのさまざまな暗号化アルゴリズムをサポートし、通常、暗号化方法、暗号化キー、暗号化する必要があるデータを提供する必要があります。
例:
<span><span><span class="hljs-variable">$plaintext</span></span><span> = </span><span><span class="hljs-string">"This is a secret message."</span></span><span>;
</span><span><span class="hljs-variable">$key</span></span><span> = </span><span><span class="hljs-string">"secretkey12345"</span></span><span>;
</span><span><span class="hljs-variable">$method</span></span><span> = </span><span><span class="hljs-string">"AES-128-ECB"</span></span><span>;
</span><span><span class="hljs-variable">$encrypted</span></span><span> = </span><span><span class="hljs-title function_ invoke__">openssl_encrypt</span></span><span>(</span><span><span class="hljs-variable">$plaintext</span></span><span>, </span><span><span class="hljs-variable">$method</span></span><span>, </span><span><span class="hljs-variable">$key</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$encrypted</span></span><span>; </span><span><span class="hljs-comment">// 出力加密后的密文</span></span><span>
</span></span>これらの2つの関数が使用されるシナリオは、通常、バイナリデータを暗号化するときに、処理と転送が簡単な16進の文字列になってしまうことを願っています。これは、暗号化されたデータがテキストに保存されている場合、データベースに保存されたり、ネットワーク上に送信されたりするために暗号化されたデータが必要なアプリケーションシナリオに役立ちます。
AES-128-ECB暗号化され、結果をストレージ用の16進文字列に変換する必要があるプレーンテキストデータがあるとします。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 元のプレーンテキストデータ</span></span><span>
</span><span><span class="hljs-variable">$plaintext</span></span><span> = </span><span><span class="hljs-string">"Sensitive information here"</span></span><span>;
</span><span><span class="hljs-comment">// 暗号化キーとメソッド</span></span><span>
</span><span><span class="hljs-variable">$key</span></span><span> = </span><span><span class="hljs-string">"encryptionkey123"</span></span><span>;
</span><span><span class="hljs-variable">$method</span></span><span> = </span><span><span class="hljs-string">"AES-128-ECB"</span></span><span>;
</span><span><span class="hljs-comment">// 暗号化を実行します</span></span><span>
</span><span><span class="hljs-variable">$encrypted</span></span><span> = </span><span><span class="hljs-title function_ invoke__">openssl_encrypt</span></span><span>(</span><span><span class="hljs-variable">$plaintext</span></span><span>, </span><span><span class="hljs-variable">$method</span></span><span>, </span><span><span class="hljs-variable">$key</span></span><span>);
</span><span><span class="hljs-comment">// 使用 bin2hex 暗号化されたバイナリデータを16進文字列に変換します</span></span><span>
</span><span><span class="hljs-variable">$hex_encrypted</span></span><span> = </span><span><span class="hljs-title function_ invoke__">bin2hex</span></span><span>(</span><span><span class="hljs-variable">$encrypted</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"暗号化された16進文字列: "</span></span><span> . </span><span><span class="hljs-variable">$hex_encrypted</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>実際のアプリケーションでは、暗号化の結果は通常、バイナリデータであり、直接保存または送信するのは不便です。特に、暗号化されたデータをデータベースに保存するか、ネットワーク上で転送する必要がある場合、バイナリデータはエンコードの問題を引き起こす可能性があります。 BIN2HEXを使用して、暗号化されたバイナリデータをASCII文字列に変換できます。これを安全に保存または転送できます。
暗号化されたデータをデータベースに保存する必要がある場合、通常、一部のデータベースフィールドはバイナリデータの保存を直接サポートしない場合があるため、通常は16進形式に変換されます。暗号化されたデータをBIN2HEXを介して保存可能な16進列に変換することで、送信とストレージ中のデータの互換性が保証されます。
特にHTTP要求またはその他のテキストプロトコルを介して、暗号化されたデータを転送する場合、バイナリデータが誤ってエンコードまたは紛失される可能性があります。したがって、暗号化されたデータを16進形式に変換することにより、これらの問題を回避でき、暗号化されたデータの完全性を確保できます。
もちろん、復号化プロセスでは、 hex2binを使用してhex stringをバイナリデータに変換し、 openssl_decryptを介して復号化する必要があります。
例:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 暗号化された16進文字列</span></span><span>
</span><span><span class="hljs-variable">$hex_encrypted</span></span><span> = </span><span><span class="hljs-string">"2b7e151628aed2a6abf7158809cf4f3c"</span></span><span>;
</span><span><span class="hljs-comment">// 16進数文字列をバイナリデータに変換します</span></span><span>
</span><span><span class="hljs-variable">$encrypted_data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">hex2bin</span></span><span>(</span><span><span class="hljs-variable">$hex_encrypted</span></span><span>);
</span><span><span class="hljs-comment">// 復号化</span></span><span>
</span><span><span class="hljs-variable">$key</span></span><span> = </span><span><span class="hljs-string">"encryptionkey123"</span></span><span>;
</span><span><span class="hljs-variable">$method</span></span><span> = </span><span><span class="hljs-string">"AES-128-ECB"</span></span><span>;
</span><span><span class="hljs-variable">$decrypted</span></span><span> = </span><span><span class="hljs-title function_ invoke__">openssl_decrypt</span></span><span>(</span><span><span class="hljs-variable">$encrypted_data</span></span><span>, </span><span><span class="hljs-variable">$method</span></span><span>, </span><span><span class="hljs-variable">$key</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"復号化后的明文: "</span></span><span> . </span><span><span class="hljs-variable">$decrypted</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>bin2hexとopenssl_encryptを組み合わせることにより、暗号化されたバイナリデータを16進列に変換して、簡単な保存と送信を行うことができます。このアプローチは、データの移植性を改善するだけでなく、暗号化されたデータのセキュリティと整合性を保証します。うまくいけば、この記事の例を通して、データ処理の効率と信頼性を改善するために、実際のプロジェクトにこれら2つの機能を適用する方法を習得することができます。