ホームページ  >  記事  >  php教程  >  PHP openssl 暗号化拡張機能の使用の概要

PHP openssl 暗号化拡張機能の使用の概要

高洛峰
高洛峰オリジナル
2016-12-23 17:54:241167ブラウズ

はじめに

インターネットの発展の歴史において、セキュリティは常に開発者が非常に重視するテーマであり、データ送信のセキュリティを実現するには、データ ソース (リクエストの偽造ではない)、データの整合性を確保する必要があります。 (変更されていません)、データプライバシー (暗号化されたテキスト、直接読み取ることはできません) など。 SSL/TLS プロトコルによって実装された HTTPS プロトコルはすでに存在しますが、これはクライアント上のブラウザの適切な実装に依存しており、非常に非効率であるため、一般的な機密データ (トランザクションの支払い情報など) を依然として必要とします。暗号化方式を使用して手動で暗号化します。

一般の WEB 開発者は、基盤となるセキュリティ関連テクノロジーの一部を深く理解する必要はありませんが、暗号化の基本を学び、既存の暗号化関連ツールを使用することは非常に必要です。仕事の都合上、暗号化関連の記事をいくつか読み、自分の経験に基づいてこの記事を完成させました。

暗号化の基本

暗号化の使用方法を学ぶ前に、暗号化に関連する基本的な知識を理解する必要があります。

暗号化アルゴリズムは、一般的に対称暗号化アルゴリズムと非対称暗号化アルゴリズムの 2 種類に分類されます。

対称暗号化

対称暗号化アルゴリズムでは、メッセージの送信者と受信者が同じキーを使用してファイルを暗号化し、受信者が同じキーを使用して復号化して情報を取得します。一般的な対称暗号化アルゴリズムは、des/aes/3des です。対称暗号化アルゴリズムの特徴は次のとおりです。高速で、暗号化の前後でファイル サイズがあまり変化しませんが、送信者と暗号化が行われるため、キーの保存が大きな問題となります。メッセージの受信者は、一方の当事者のキーが失われると、情報送信が安全でなくなる可能性があります。

非対称暗号化

対称暗号化の反対は、非対称暗号化の基本的な考え方で、公開鍵と秘密鍵に分けられた相対的な鍵のペアを使用することです。が公開されます。公開キーと秘密キーはペアであり、公開キーがデータの暗号化に使用される場合、対応する秘密キーのみを使用してデータを暗号化できます。を使用して復号化できます。送信する前に、受信者の公開キーを使用してデータを暗号化するだけです。一般的な非対称暗号化アルゴリズムには RSA/DSA が含まれます。

非対称暗号化には鍵の保管の問題はありませんが、大量の計算が必要となり、暗号化速度が非常に遅くなります。場合によっては、大量のデータをブロック単位で暗号化する必要があります。

デジタル署名

データの完全性を保証するために、ハッシュ関数を通じてハッシュ値を計算する必要があります。このハッシュ値はデジタル署名と呼ばれます。その特徴は次のとおりです:

•元のデータがどれほど大きくても、結果の長さは同じです

•入力は同じであり、出力も同じです

•入力への小さな変更は大きな影響を及ぼします。結果の変更
•暗号化プロセスは不可逆的であり、ハッシュ値から元のデータを取得することはできません

一般的なデジタル署名アルゴリズムには、md5、hash1 などのアルゴリズムが含まれます。

PHP の openssl 拡張機能

openssl 拡張機能は、暗号化と復号化に関連する複数の PHP 関数をカプセル化する openssl 暗号化拡張機能パッケージを使用しており、データの暗号化と復号化が大幅に容易になります。 一般的に使用される関数は次のとおりです:

対称暗号化関連:

string openssl_encrypt (string $data, string $method, string $password)

$data は暗号化されるデータ、$method は暗号化に使用されるメソッドです、 $ Password は使用されるキーであり、関数は暗号化されたデータを返します。 $method リストは openssl_get_cipher_methods() を使用して取得できます。 $method リストは次のようになります。

It 復号化関数は string openssl_encrypt (string $data, string $method, string $password) です

非対称暗号化関連:

Array(
  0 => aes-128-cbc,  // aes加密
  1 => des-ecb,    // des加密
  2 => des-ede3,   // 3des加密
  ...
  )

これらはすべて、証明書ファイル (通常は .pem ファイル);

openssl_get_publickey();openssl_pkey_get_public();   // 从证书导出公匙;
openssl_get_privatekey();openssl_pkey_get_private();  // 从证书导出私匙;


公開キーを使用してデータを暗号化します。 $data は暗号化されるデータであり、暗号化されたデータはこの変数に入れられます。 $key はデータに渡される公開キーです。暗号化されたデータがグループ化される場合、暗号化ビット数の正確な整数倍にならない可能性があるため、$padding のオプションは OPENSSL_PKCS1_PADDING、OPENSSL_NO_PADDING、それぞれ PKCS1 パディングかどうかを指定します。パディングを使用します。

このメソッドの反対は次のとおりです (渡されるパラメーターは一貫しています):

openssl_public_encrypt(string $data , string &$crypted , mixed $key [, int $padding = OPENSSL\_PKCS1\_PADDING ] )

署名および署名検証関数もあります:

openssl_private_encrypt(); // 使用私匙加密;
openssl_private_decrypt(); // 使用私匙解密;
openssl_private_decrypt(); // 使用公匙解密;


署名関数: $data は署名データです。$signature は署名に使用される秘密鍵です。$signature_alg は署名に使用されるアルゴリズムです。リストは openssl_get_md_methods () を使用して次の形式で取得できます。

bool openssl_sign ( string $data , string &$signature , mixed $priv_key_id [, mixed $signature_alg = OPENSSL_ALGO_SHA1 ] )
int openssl_verify ( string $data , string $signature , mixed $pub_key_id [, mixed $signature_alg = OPENSSL_ALGO_SHA1 ] )


署名検証関数: 秘密鍵に対応する公開鍵を渡す必要があることを除いて、署名関数とは反対です。 result は署名検証結果であり、1 は成功を意味し、0 は失敗を意味し、-1 はエラーを意味します。

暗号化の例


以下は、非対称暗号化の使用例です。非常に簡単で、 ssl_encrypt() 関数を直接使用するだけです。

もちろん、一部のインターフェイスは暗号化メソッドを実行する場合があります。異なるパディング、暗号化ブロック サイズなど、異なる要件がある場合は、ユーザーが自分で調整する必要があります。

データは HTTP プロトコル上で処理されるため、データの暗号化が完了した後、基盤となる送信を考慮する必要はなく、cURL または SOAP 拡張メソッドを使用してインターフェイスに直接リクエストできます。

結論

暗号化は、難しい理論と多くの概念を伴う非常に高度な主題です。WEB 開発者として、その基礎となる実装を学ぶ必要はありませんが、カプセル化されたメソッドの使用方法を学ぶことは開発にとって非常に有益です。基本的な実装を理解するだけでも、アルゴリズムなどについて新たな理解を得ることができます。

PHP の openssl 暗号化拡張機能の使用に関する上記の概要 (推奨) は、編集者によって共有されたすべての内容です。参考にしていただければ幸いです。また、PHP 中国語 Web サイトをサポートしていただければ幸いです。

PHP の openssl 暗号化拡張機能の使用に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。