openssl に基づく PHP 暗号化および復号化方法
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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
