プロジェクトのニーズにより、「認可コード」を生成できるクラスを記述する必要があります(認可コードには主にプロジェクトの有効期限が含まれます)。生成された認可コードは、毎にファイルに書き込まれます。プロジェクトの実行時に、ファイル内の暗号文が自動的に読み取られ、一意の「キー」を使用して関数が呼び出され、暗号文が復号化され、プロジェクトの有効期限が解釈されます。
以前、主にbase64+md5+reverse stringを自分で書いてみました。このアルゴリズムは単純すぎるため簡単に解読され、暗号化と復号化における「鍵」の重要性を認識できていないため、放棄されました。
その後、関連情報を検索したところ、Mcrypt という強力な関数ライブラリが PHP に組み込まれていることがわかりました。
実際、mcrypt 自体は強力な暗号化および復号化メソッドを提供し、DES、TripleDES、Blowfish (デフォルト)、3-WAY、SAFER-SK64、SAFER-SK128、TWOFISH、TEA、RC2、およびCBC、OFB、CFB、ECB の GOST。これは百度百科事典の「暗号化アルゴリズム」の説明からの簡単な引用です:
データ暗号化の基本プロセスは、元々プレーンテキストだったファイルやデータを特定のアルゴリズムに従って処理し、通常は「暗号文」と呼ばれる判読不能なコードに変換し、対応する暗号文を入力した後にのみ暗号化できるようにすることです。この方法によってのみ、元のコンテンツが表示され、不正な人物によるデータの盗難や読み取りを防ぐという目的が達成されます。 このプロセスの逆は復号化であり、エンコードされた情報を元のデータに変換するプロセスです。
暗号化テクノロジーは通常、「対称」と「非対称」の 2 つのカテゴリに分類されます。
対称暗号化とは、暗号化と復号化に通常「セッション キー」と呼ばれる同じキーを使用することを意味します。たとえば、米国政府が採用している DES 暗号化標準は、典型的な「対称」暗号化方式です。セッションキーの長さは 56 ビットです。
非対称暗号化とは、暗号化と復号化で異なるキーを使用することを意味します。通常、「公開キー」と「秘密キー」と呼ばれる 2 つのキーがあり、それらをペアにする必要があります。そうしないと、暗号化されたファイルを開くことができません。ここでの「公開鍵」は外部に公開できることを意味しますが、「秘密鍵」は外部に公開できず、所有者のみが知ることができます。ここに対称暗号方式の優位性があり、暗号化されたファイルをネットワーク上に送信する場合、どの方法を使っても相手に鍵を伝えることが難しく、盗聴される可能性がある。非対称暗号化方式は鍵が 2 つあり、「公開鍵」を公開できるため、受信者は復号するときに自分の秘密鍵を使用するだけで済み、鍵の送信を回避できる点が非常に優れています。セキュリティ上の問題。
前述したように、mcrypt はさまざまな国際的に公開されているアルゴリズムをサポートしています。このプロジェクトでは、高速で大量のデータの暗号化に適した対称アルゴリズムである DES (Data Encryption Standard) を使用しました。
使用されるいくつかの暗号化関数の紹介
次に、暗号化クラスで使用されるいくつかの関数について簡単に説明します。
1. リソース mcrypt_module_open (文字列 $algorithm 、文字列 $algorithm_directory 、文字列 $mode 、文字列 $mode_directory )
- パラメータ $algorithm: 使用されるアルゴリズム。関数 mcrypt_list_algorithms() を通じて、サポートされているすべてのアルゴリズム名を表示できます
- パラメータ $mode: 使用するモード。同様に、関数 mcrypt_list_algorithms() を組み込んで、サポートされているすべてのモードを表示できます
- この関数は、使用されるアルゴリズムの初期化ベクトル (IV) のサイズを返します (少し抽象的に見えます)。IV がアルゴリズムで無視される場合は 0 を返します。
- パラメータ$tdはmcrypt_module_open関数の戻り値です。
この関数は初期化ベクトル (IV) を作成します
パラメータ: $source には MCRYPT_RAND、MCRYPT_DEV_RANDOM、MCRYPT_DEV_URANDOM を指定できます
注: PHP5.3.0 以降は MCRYPT_RAND のみをサポートします
戻り値: 成功した場合は、文字列の初期ベクトルが返されます。失敗した場合は、False が返されます。
4. int mcrypt_enc_get_key_size (リソース $td )
この関数は、現在のアルゴリズムでサポートされている最大キー長(バイト単位)を取得できます
int mcrypt_generic_init (リソース $td 、文字列 $key 、文字列 $iv )
mcrypt_generic() または mdecrypt_generic() を呼び出す前に、この関数を最初に呼び出す必要があります。この関数は、暗号化されたデータを保存するためのバッファーを初期化するのに役立ちます。
パラメータ $key: キーの長さ $key の現在の値は関数 mcrypt_enc_get_key_size() によって返される値より小さいことに注意してください。
質問: $key の値は大きいほど良いのでしょうか?同級生会があれば、この質問に答えるのを手伝ってください。5. 文字列 mcrypt_generic (リソース $td 、文字列 $data )
前の作業が完了したら、この関数を呼び出してデータを暗号化できます。
パラメータ $data: 暗号化されるデータの内容
- 戻り値: 暗号化された暗号文を返します
- 6. bool mcrypt_generic_deinit (リソース $td )
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE.
7. string mdecrypt_generic ( resource $td , string $data )
该函数能够用来解密数据。
注意:解密后的数据可能比实际上的更长,可能会有后续的\0,需去掉
8. bool mcrypt_module_close ( resource $td )
关闭指定的加密模块资源句柄
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE.
参考代码
<?php class authCode { public $ttl;//到期时间 时间格式:20120101(年月日) public $key_1;//密钥1 public $key_2;//密钥2 public $td; public $ks;//密钥的长度 public $iv;//初始向量 public $salt;//盐值(某个特定的字符串) public $encode;//加密后的信息 public $return_array = array(); // 返回带有MAC地址的字串数组 public $mac_addr;//mac地址 public $filepath;//保存密文的文件路径 public function __construct(){ //获取物理地址 $this->mac_addr=$this->getmac(PHP_OS); $this->filepath="./licence.txt"; $this->ttl="20120619";//到期时间 $this->salt="~!@#$";//盐值,用以提高密文的安全性 // echo "<pre class="brush:php;toolbar:false">".print_r(mcrypt_list_algorithms ()).""; // echo "
".print_r(mcrypt_list_modes()).""; } /** * 对明文信息进行加密 * @param $key 密钥 */ public function encode($key) { $this->td = mcrypt_module_open(MCRYPT_DES,'','ecb',''); //使用MCRYPT_DES算法,ecb模式 $size=mcrypt_enc_get_iv_size($this->td);//设置初始向量的大小 $this->iv = mcrypt_create_iv($size, MCRYPT_RAND);//创建初始向量 $this->ks = mcrypt_enc_get_key_size($this->td);//返回所支持的最大的密钥长度(以字节计算) $this->key_1 = substr(md5(md5($key).$this->salt),0,$this->ks); mcrypt_generic_init($this->td, $this->key_1, $this->iv); //初始处理 //要保存到明文 $con=$this->mac_addr.$this->ttl; //加密 $this->encode = mcrypt_generic($this->td, $con); //结束处理 mcrypt_generic_deinit($this->td); //将密文保存到文件中 $this->savetofile(); } /** * 对密文进行解密 * @param $key 密钥 */ public function decode($key) { try { if (!file_exists($this->filepath)){ throw new Exception("授权文件不存在"); }else{//如果授权文件存在的话,则读取授权文件中的密文 $fp=fopen($this->filepath,'r'); $secret=fread($fp,filesize($this->filepath)); $this->key_2 = substr(md5(md5($key).$this->salt),0,$this->ks); //初始解密处理 mcrypt_generic_init($this->td, $this->key_2, $this->iv); //解密 $decrypted = mdecrypt_generic($this->td, $secret); //解密后,可能会有后续的\0,需去掉 $decrypted=trim($decrypted) . "\n"; //结束 mcrypt_generic_deinit($this->td); mcrypt_module_close($this->td); return $decrypted; } }catch (Exception $e){ echo $e->getMessage(); } } /** * 将密文保存到文件中 */ public function savetofile(){ try { $fp=fopen($this->filepath,'w+'); if (!$fp){ throw new Exception("文件操作失败"); } fwrite($fp,$this->encode); fclose($fp); }catch (Exception $e){ echo $e->getMessage(); } } /** * 取得服务器的MAC地址 */ public function getmac($os_type){ switch ( strtolower($os_type) ){ case "linux": $this->forLinux(); break; case "solaris": break; case "unix": break; case "aix": break; default: $this->forWindows(); break; } $temp_array = array(); foreach( $this->return_array as $value ){ if (preg_match("/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i",$value,$temp_array )){ $mac_addr = $temp_array[0]; break; } } unset($temp_array); return $mac_addr; } /** * windows服务器下执行ipconfig命令 */ public function forWindows(){ @exec("ipconfig /all", $this->return_array); if ( $this->return_array ) return $this->return_array; else{ $ipconfig = $_SERVER["WINDIR"]."\system32\ipconfig.exe"; if ( is_file($ipconfig) ) @exec($ipconfig." /all", $this->return_array); else @exec($_SERVER["WINDIR"]."\system\ipconfig.exe /all", $this->return_array); return $this->return_array; } } /** * Linux服务器下执行ifconfig命令 */ public function forLinux(){ @exec("ifconfig -a", $this->return_array); return $this->return_array; } } $code=new authCode(); //加密 $code->encode("~!@#$%^"); //解密 echo $code->decode("~!@#$%^"); ?>

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

Dreamweaver Mac版
ビジュアル Web 開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

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