PHP の組み込み DES アルゴリズム関数を使用してデータの暗号化と復号化を実装する_PHP チュートリアル
プロジェクトのニーズにより、「認可コード」を生成できるクラスを記述する必要があります(認可コードには主にプロジェクトの有効期限が含まれます)。生成された認可コードは、毎にファイルに書き込まれます。プロジェクトの実行時に、ファイル内の暗号文が自動的に読み取られ、一意の「キー」を使用して関数が呼び出され、暗号文が復号化され、プロジェクトの有効期限が解釈されます。
以前、主に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("~!@#$%^"); ?>

ホット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)

ホットトピック









Bitlocker は、Windows オペレーティング システムのデフォルトの暗号化テクノロジです。 Windows で広く使用されていますが、VeraCrypt などのサードパーティ ソリューションを好むユーザーもいます。 Bitlocker の多くのユーザーは、256 ビット暗号化が利用可能であるにもかかわらず、デフォルトで 128 ビット暗号化が使用されることを知りません。違いについては詳しく説明しませんが、AES 128 ビット暗号化と 256 ビット暗号化の主な違いはセキュリティ キーの長さです。キーが長いと、ブルート フォース攻撃がより困難になります。デフォルトは 128 ビットですが、Microsoft でもセキュリティを向上させるために 256 ビットを推奨しています。問題は、ほとんどのユーザーがおそらく弱いデフォルトやその変更方法について知らないことです。まず、W について知りたいかもしれません

Microsoft は以前、win11 用の DNS 暗号化サービスを提供していましたが、多くのユーザーは win11 の暗号化された DNS の使用方法を知りません。実際には、ネットワーク設定で DNS 設定を開くだけで済みます。 win11 暗号化 DNS に関する詳細なチュートリアル: 1. まずディスクに入り、暗号化するフォルダーを見つけます。 2. 次に、右側の「イーサネット」を開きます。 3. 次に、下の DNS サーバーの割り当てを見つけて、「編集」をクリックします。 4. 「自動 (DHCP)」を「手動」に変更した後、下の「IPv4」を開きます。 5. オンにしたら、優先 DNS に「8.8.8.8」と入力します。 6. 次に、優先 DNS 暗号化を「暗号化のみ (HTTPS 経由の DNS)」に変更します。 7. 変更が完了したら、「保存」をクリックすると、

ファイル暗号化は、プロレベルのデータ暗号化を実装して、データのセキュリティをより効果的に確保することを目的としています。正しい暗号化キーを習得することによってのみ復号化操作を実行できるため、情報資産のセキュリティが確保されます。ただし、Win10 Home Edition のファイル暗号化機能にはまだこの機能がありません。 Win10 Home Edition はフォルダーを暗号化できますか? 回答: Win10 Home Edition はフォルダーを暗号化できません。 Windows システムでのファイル暗号化に関するチュートリアル 1. 暗号化するファイルまたはフォルダーを右クリックし (またはしばらく押し続けて)、「プロパティ」機能を選択します。 2. 新しい拡張されたインターフェースで、「詳細」オプションをクリックして入力した後、その下にある「コンテンツを暗号化してデータを保護する」オプションを忘れずにチェックしてください。 3. 設定が完了したら、「OK」をクリックしてください。

Apple の携帯電話では、ユーザーは自分のニーズに応じてフォト アルバムを暗号化できます。設定方法がわからないユーザーもいます。暗号化が必要な写真をメモに追加し、メモをロックすることができます。次に、編集者がユーザー向けにモバイル フォト アルバムの暗号化を設定する方法を紹介します。興味のあるユーザーは、ぜひご覧ください。 Apple 携帯電話チュートリアル iPhone フォト アルバム暗号化の設定方法 A: 暗号化する必要がある写真をメモに追加した後、メモをロックして詳細を説明します。 1. フォト アルバムに入り、暗号化する必要がある写真を選択します。暗号化されたものを選択し、下の[追加]をクリックします。 2. [ノートに追加]を選択します。 3. メモを入力し、作成したメモを見つけて入力し、右上隅の [送信] アイコンをクリックします。 4. 下の[デバイスをロック]をクリックします

フォルダー暗号化は、フォルダーの内容を暗号化して、復号化パスワードを持っている人だけがファイルにアクセスできるようにする一般的なデータ保護方法です。フォルダーを暗号化する場合、ファイルを圧縮せずにパスワードを設定する一般的な方法がいくつかあります。まず、オペレーティング システムに付属の暗号化機能を使用して、フォルダーのパスワードを設定します。 Windowsユーザーの場合は、次の手順で設定できます。 暗号化するフォルダーを選択し、フォルダーを右クリックし、「プロパティ」を選択します。

C# におけるネットワーク通信とセキュリティの一般的な問題と解決策 今日のインターネット時代では、ネットワーク通信はソフトウェア開発に不可欠な部分となっています。 C# では通常、データ送信のセキュリティ、ネットワーク接続の安定性など、ネットワーク通信の問題が発生します。この記事では、C# における一般的なネットワーク通信とセキュリティの問題について詳しく説明し、対応する解決策とコード例を提供します。 1. ネットワーク通信の問題 ネットワーク接続の中断: ネットワーク通信プロセス中に、ネットワーク接続が中断される場合があります。

ファイルを保護したいが、Win11 ドキュメントを暗号化する方法がわからない友人もいます。実際、フォルダー暗号化を直接使用するか、サードパーティ ソフトウェアを使用してファイルを暗号化できます。 win11 ドキュメント暗号化に関する詳細なチュートリアル: 1. まず、暗号化するファイルを見つけて右クリックして選択し、[プロパティ] を開きます。 2. 次に、プロパティ列の [詳細] をクリックします。 3. [コンテンツを暗号化してデータを保護する] を選択します。 4. 次に、「OK」をクリックして保存します。 5. 最後に、希望の暗号化モードを選択し、「OK」をクリックして文書を保存し、文書を暗号化します。

PHP 暗号化および復号化関数の完全なリスト: md5、sha1、base64_encode およびその他の関数の安全な適用方法 (具体的なコード例が必要) ネットワーク アプリケーションの開発において、データの暗号化と復号化は非常に重要です。 PHP はサーバーサイド スクリプト言語としてよく使用されており、さまざまな暗号化および復号化関数を提供しています。この記事では、一般的に使用される関数とその安全な適用方法を紹介し、具体的なコード例を示します。 md5 関数 md5 関数は、任意の長さの文字列を 32 ビットに変換できる最も一般的な暗号化関数です。
