ホームページ  >  記事  >  バックエンド開発  >  openssl に基づく PHP 暗号化および復号化方法

openssl に基づく PHP 暗号化および復号化方法

怪我咯
怪我咯オリジナル
2017-07-12 10:03:124496ブラウズ

openssl OpenSSL入門
SSLとは、Secure Socket Layer (Secure Socket Layer Protocol)の略称で、インターネット上で機密通信を実現するプロトコルです。 Netscape は最初の Web ブラウザを発売したときに、SSL プロトコル標準も提案しました。現在、このプロトコルのバージョンは 3.0 です。 SSL は公開キー技術を使用します。その目標は、2 つのアプリケーション間の通信の機密性と信頼性を確保することであり、サーバー側とユーザー側の両方でサポートできます。現在、公開鍵技術を使用した SSL プロトコルは、インターネット上の安全な通信の業界標準となっています。 Secure Sockets Layer プロトコルは、ユーザー/サーバー アプリケーション間の通信が攻撃者によって盗聴されるのを防ぎ、サーバーと必要に応じてユーザーを常に認証します。 SSL プロトコルには、信頼性の高いトランスポート層プロトコル (TCP) が必要です。 SSL プロトコルの利点は、アプリケーション層プロトコルから独立していることです。高レベルのアプリケーション層プロトコル (HTTP、FTP、TELNET など) を SSL プロトコル上に透過的に構築できることです。 SSL プロトコルは、アプリケーション層プロトコル通信の前に、暗号化アルゴリズム、通信キーのネゴシエーション、およびサーバー認証を完了します。その後、アプリケーション層プロトコルで送信されるデータは暗号化され、通信のプライバシーが確保されます。以上の説明から、SSL プロトコルが提供するセキュアチャネルには次の 3 つの特徴があります。 1. データの機密性 情報の暗号化とは、平文の入力ファイルを暗号化アルゴリズムを使用して暗号化ファイルに変換し、データの機密性を確保することです。暗号化プロセスでは、キーを使用してデータを暗号化し、それを復号化する必要があります。キーがなければ、暗号化されたデータを復号化できません。データが暗号化された後は、安全な方法を使用してキーを送信するだけで済みます。暗号化されたデータは公衆に送信できます。 2. データの一貫性 暗号化によってデータの一貫性も確保できます。例: メッセージ 検証コード (MAC) は、ユーザーが提供した暗号化された情報を検証でき、受信者は MAC を使用して暗号化されたデータを検証し、送信中にデータが改ざんされていないことを確認できます。 3. セキュリティ検証 暗号化のもう 1 つの用途は個人識別としてであり、ユーザーのキーをセキュリティ検証 ID として使用できます。 SSL は、機密情報を送信する際に、クライアントとサーバー間の暗号化通信プロトコルとして公開キー暗号化テクノロジ (RSA) を使用します。
OpenSSL とは
数多くの暗号化アルゴリズム、公開鍵インフラストラクチャ標準、および SSL プロトコルが存在するため、おそらくこれらの興味深い機能がすべてのアルゴリズムと標準を実装するアイデアを与えるでしょう。もしそうなら、私はあなたに敬意を表しますが、これは気の遠くなるようなプロセスであることを思い出さずにはいられません。この仕事は、暗号に関する専門書やプロトコルの文書を数冊読むほど単純なものではなくなり、これらすべてのアルゴリズム、標準、プロトコルの文書を詳細に理解し、馴染みのある C 言語 の文字を 1 つずつ使用する必要があります。これらの定義とプロセスを実装します。この楽しくも恐ろしい仕事にどれくらいの時間がかかるかわかりませんが、1 年や 2 年の問題ではないことは確かです。
まず第一に、1995 年に後に大きな影響を与えた OpenSSL ソフトウェア パッケージの作成を開始した Eric A. Young と Tim J. Hudson に感謝しなければなりません。さらに嬉しいのは、これがオープンソース ソフトウェアであることです。多くの制限があるため、このパッケージでさまざまなことが可能になります。 Eric A. Young と Tim J. Hudson はカナダ人で、後に OpenSSL を書いて有名になり、大企業に入社して大金を稼ぎました。 1998 年に、OpenSSL プロジェクト チームが OpenSSL の開発を引き継ぎ、OpenSSL バージョン 0.9.1 をリリースしました。これまでのところ、OpenSSL アルゴリズムは非常に完成しており、SSL2.0、SSL3.0、および TLS1.0 をサポートしています。
OpenSSL は開発言語として C 言語を使用しているため、OpenSSL は優れたクロスプラットフォーム パフォーマンスを実現しており、使い慣れたものを異なるプラットフォームでも使用できることは、大多数の技術者にとって非常に素晴らしいことです。 OpenSSL は、Linux、Windows、BSD、Mac、VMS およびその他のプラットフォームをサポートしているため、OpenSSL を広く適用できます。ただし、新しく成長した C++ プログラマーにとって、C 言語のコードにはあまり慣れていないかもしれませんが、C++ を使用して OpenSSL と同じ機能を備えたソフトウェア パッケージを書き直すよりも、C 言語に慣れる方がはるかに簡単です。
OpenSSL ソフトウェア パッケージ全体は、暗号アルゴリズム ライブラリ、SSL プロトコル ライブラリ、およびアプリケーションの 3 つの主要な機能部分に大別できます。 OpenSSL の ディレクトリ構造 は、これら 3 つの機能部分を中心に自然に計画されています。
暗号ベースのセキュリティ開発パッケージとして、OpenSSL は、主要な暗号アルゴリズム、一般的に使用されるキーと証明書のカプセル化管理機能、SSL プロトコルを含む、非常に強力で包括的な機能を提供し、テストまたは他の目的で使用するための豊富なアプリケーションを提供します。
1.対称暗号化アルゴリズム
OpenSSL は、合計 8 つの対称暗号化アルゴリズムを提供し、そのうち 7 つはブロック暗号アルゴリズムであり、唯一のストリーム暗号アルゴリズムは RC4 です。これら 7 つのブロック暗号化アルゴリズムは、AES、DES、Blowfish、CAST、IDEA、RC2、および RC5 であり、すべて電子コードブック モード (ECB)、暗号化ブロック チェーン モード (CBC)、暗号化フィードバック モード (CFB)、および出力フィードバック モードをサポートしています。 . (OFB) 一般的に使用される 4 つのブロック暗号化モード。このうち、AES で使用される暗号化フィードバック モード (CFB) と出力フィードバック モード (OFB) のパケット長は 128 ビットですが、他のアルゴリズムは 64 ビットを使用します。実際、DES アルゴリズムは、一般的に使用される DES アルゴリズムだけでなく、3 キーおよび 2 キー 3DES アルゴリズムもサポートしています。
2. 非対称暗号化アルゴリズム
OpenSSL は、DH アルゴリズム、RSA アルゴリズム、DSA アルゴリズム、楕円曲線アルゴリズム (EC) を含む、合計 4 つの非対称暗号化アルゴリズムを実装しています。 DH アルゴリズムの一般ユーザー鍵交換。 RSA アルゴリズムは、鍵交換とデジタル署名の両方に使用できます。もちろん、速度が遅いことを許容できる場合は、データの暗号化にも使用できます。 DSA アルゴリズムは通常、デジタル署名にのみ使用されます。
3. 情報ダイジェスト アルゴリズム
OpenSSL は、MD2、MD5、MDC2、SHA (SHA1)、RIPEMD という 5 つの情報ダイジェスト アルゴリズムを実装しています。 SHA アルゴリズムには、実際には SHA と SHA1 という 2 つの情報ダイジェスト アルゴリズムが含まれています。さらに、OpenSSL は、DSS 標準で指定されている 2 つの情報ダイジェスト アルゴリズム DSS と DSS1 も実装します。
4. 鍵と証明書の管理
鍵と証明書の管理は、豊富な機能を提供し、複数の標準をサポートする PKI の重要な部分です。
まず第一に、OpenSSL は ASN.1 証明書とキー関連の標準を実装し、証明書、公開キー、秘密キー、証明書リクエスト、CRL、その他のデータ オブジェクトの DER、PEM、BASE64 エンコードおよびデコード機能を提供します。 OpenSSL は、さまざまな公開鍵ペアと対称鍵を生成するためのメソッド、関数、およびアプリケーションを提供し、公開鍵と秘密鍵の DER エンコードおよびデコード機能も提供します。また、秘密鍵の PKCS#12 および PKCS#8 のエンコードおよびデコード機能を実装します。 OpenSSL は標準で秘密キーの暗号化保護を提供するため、キーを安全に保存および配布できます。
これに基づいて、OpenSSL は、証明書の X.509 標準エンコードとデコード、PKCS#12 形式のエンコードとデコード、PKCS#7 のエンコードとデコードを実装します。また、証明書キーの生成、要求の生成、証明書の発行、失効、検証などの証明書管理機能をサポートするテキスト データベースも提供します。
実際、OpenSSL によって提供される CA アプリケーションは、証明書発行のプロセス全体と証明書管理のメカニズムのほとんどを実装する小規模な証明書管理センター (CA) です。
5.SSL および TLS プロトコル
OpenSSL は、SSL プロトコルの SSLv2 および SSLv3 を実装し、ほとんどのアルゴリズム プロトコルをサポートします。 OpenSSL も TLSv1.0 を実装しています。TLS は SSLv3 の標準化されたバージョンですが、大きな違いはありませんが、多くの詳細が異なります。
OpenSSL の機能を実装したソフトウェアは数多くありますが、OpenSSL に実装された SSL プロトコルは、少なくとも 2 つの点があるため、SSL プロトコルをより明確に理解できます。 まず、OpenSSL によって実装された SSL プロトコルはオープンソースです。コード はい、SSL プロトコル実装のあらゆる詳細を調査できます。第 2 に、OpenSSL によって実装された SSL プロトコルは純粋な SSL プロトコルであり、他のプロトコル (HTTP など) と組み合わせられていないため、SSL プロトコルの本当の姿が明らかになります。
6. アプリケーション
OpenSSL アプリケーションは OpenSSL の重要な部分になっていますが、最初は OpenSSL の開発者はその重要性を考えていなかったかもしれません。現在の OpenSSL アプリケーションの多くは、API ではなく OpenSSL アプリケーションに基づいています。たとえば、OpenCA は OpenSSL アプリケーションを使用して完全に実装されています。 OpenSSL アプリケーションは、OpenSSL 暗号化アルゴリズム ライブラリと SSL プロトコル ライブラリに基づいて作成されているため、これらの例をすべて読むと、OpenSSL API の使用法をより包括的に理解できるようになります。これも意志の力を発揮する仕事です。
OpenSSL アプリケーションは、比較的包括的な機能を提供するため、OpenSSL はそれ自体ですべてを実行し、追加の開発作業を行う必要がないため、これらのアプリケーションは OpenSSL 命令とも呼ばれます。 OpenSSL アプリケーションには主に、キー生成、証明書管理、形式変換、データ暗号化と署名、SSL テスト、その他の補助構成機能が含まれます。
7. エンジン機構 エンジン機構は OpenSSL バージョン 0.9.6 で登場しましたが、OpenSSL バージョン 0.9.7 ではエンジン機構が OpenSSL カーネルに統合されました。 OpenSSL に不可欠な部分です。 Engine メカニズムの目的は、OpenSSL が暗号化のためにサードパーティが提供するソフトウェア暗号化ライブラリまたはハードウェア暗号化デバイスを透過的に使用できるようにすることです。 OpenSSL のエンジン メカニズムはこの目標をうまく達成しており、これにより OpenSSL は単なる暗号化ライブラリではなく、ほとんどの暗号化ライブラリや暗号化デバイスと連携できるユニバーサルな暗号化インターフェイスが提供されます。もちろん、特定の暗号化ライブラリまたは暗号化デバイスを OpenSSL で動作させるには、少量のインターフェイス コードを記述する必要がありますが、暗号化に関する知識は多少必要ですが、作業負荷はそれほど大きくありません。 Engine 機構の機能は、Windows が提供する CSP の機能目標と基本的に同じです。現在、OpenSSL バージョン 0.9.7 は、CryptoSwift、nCipher、Atalla、Nuron、UBSEC、Aep、SureWare、IBM 4758 CCA ハードウェア暗号化デバイスを含む 8 種類の組み込みサードパーティ暗号化デバイスをサポートしています。現在、PKCS#11 インターフェイスをサポートするエンジン インターフェイスがあり、Microsoft CryptoAPI をサポートするインターフェイスも開発中です。もちろん、上記のエンジン インターフェイスすべてのサポートは包括的ではない場合があります。たとえば、1 つまたは 2 つの公開キー アルゴリズムがサポートされる場合があります。
8. 補助機能
BIO メカニズムは、OpenSSL によって提供される高レベルの IO インターフェイスであり、メモリ アクセス、ファイル アクセス、ソケットなどのほぼすべての種類の IO インターフェイスをカプセル化します。これにより、コードの再利用性が大幅に向上し、OpenSSL が提供する API の複雑さが軽減されます。
OpenSSL は、乱数の生成と管理のためのソリューションとサポート API 関数の完全なセットも提供します。乱数の品質は、キーが安全かどうかを判断するための重要な前提条件です。
OpenSSL は、パスワードからキーを生成するための API、証明書の発行と管理のための 設定ファイル メカニズムなど、他の補助機能も提供します。十分な忍耐力があれば、OpenSSL を徹底的に使用するうちに、このような多くの小さな機能を徐々に発見し、常に新しい驚きを与えてくれるでしょう。

この記事では、主にphpのopensslに基づく暗号化と復号化方法を紹介し、opensslに基づいて暗号化と復号化操作を実装するphpカスタム関数の関連技術をサンプルの形式で分析します。 この記事では、PHP が openssl に基づいて暗号化および復号化メソッドを実装する例について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

opensslによる暗号化と復号化方法

1. openssl暗号化方法:

function encrypt($id){
  $id=serialize($id);
  $key="1112121212121212121212";
  $data['iv']=base64_encode(substr('fdakinel;injajdji',0,16));
  $data['value']=openssl_encrypt($id, 'AES-256-CBC',$key,0,base64_decode($data['iv']));
  $encrypt=base64_encode(json_encode($data));
  return $encrypt;
}

2. openssl復号化方法: リーリー

以上がopenssl に基づく PHP 暗号化および復号化方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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