PHP の組み込み関数を使用した DES アルゴリズムによるデータの暗号化と復号化
プロジェクトの都合上、「認可コード」を生成できるクラスを記述する必要があります(認可コードには主にプロジェクトの有効期限が含まれます)。生成された認可コードはファイルに書き込まれます。プロジェクトが実行されると、ファイル内の暗号文が自動的に読み取られ、一意の「キー」を使用して関数が呼び出され、暗号文が復号化され、プロジェクトの有効期限が解釈されます。
以前、base64 md5 逆文字列を中心に自分で書いてみました。このアルゴリズムは単純すぎるため簡単に解読され、暗号化と復号化における「鍵」の重要性を認識できていないため、放棄されました。
その後、関連情報を検索したところ、Mcrypt という強力な関数ライブラリが PHP に組み込まれていることがわかりました。
実際、mcrypt 自体は強力な暗号化および復号化メソッドを提供し、DES、TripleDES、Blowfish (デフォルト)、3-WAY、SAFER-SK64、SAFER-SK128、TWOFISH、TEA、 CBC、OFB、CFB、ECB の RC2 と GOST。
以下は、Baidu Encyclopedia の「暗号化アルゴリズム」の説明からの簡単な引用です。
データ暗号化の基本的なプロセスは、元はプレーン テキストだったファイルまたはデータを特定のアルゴリズムに従って処理し、読み取り不可能にすることです。通常「暗号文」と呼ばれるコードで、対応するキーを入力した場合にのみ元のコンテンツが表示されるようにすることで、不正な人物によるデータの盗難や読み取りを防ぐという目的が達成されます。 このプロセスの逆は復号化であり、エンコードされた情報を元のデータに変換するプロセスです。
暗号化テクノロジーは通常、「対称」と「非対称」の 2 つのカテゴリに分類されます。
対称暗号化とは、暗号化と復号化に通常「セッション キー」と呼ばれる同じキーを使用することを意味します。たとえば、米国政府が採用している DES 暗号化標準は、典型的な「対称暗号化」です。 「暗号化方式、セッションキー長は56ビットです。
非対称暗号化は、暗号化と復号化で異なるキーを使用することを意味します。通常、「公開キー」と「秘密キー」と呼ばれる 2 つのキーがペアになっている必要があり、それ以外の場合は暗号化ドキュメントを開くことができません。ここでの「公開鍵」は外部に公開できることを意味しますが、「秘密鍵」は外部に公開できず、所有者のみが知ることができます。ここに対称暗号方式の優位性があり、暗号化したファイルをネットワーク上に送信する場合、どの方法を使っても相手に鍵を伝えることが難しく、盗聴される可能性がある。非対称暗号化方式は鍵が 2 つあり、「公開鍵」を公開できるため、受信者は復号するときに自分の秘密鍵を使用するだけで済み、鍵の送信を回避できる点が非常に優れています。セキュリティの問題。
前述したように、mcrypt は国際的に公開されているさまざまなアルゴリズムをサポートしています。このプロジェクトでは、高速で大量のデータの暗号化に適した対称アルゴリズムである DES (Data Encryption Standard) を使用しました。
次に、暗号化クラスで使用されるいくつかの関数について簡単に説明します。
------------------------------------------ ------ ------------------------------------
resource mcrypt_module_open ( string $ Algorithm , string $algorithm_directory , string $mode , string $mode_directory )
パラメータ $algorithm: 使用するアルゴリズム。関数 mcrypt_list_algorithms() を通じて、サポートされているすべてのアルゴリズム名を表示できます。
パラメータ $mode: どのモードにするか同様に、サポートされているすべてのモードを表示するには、組み込み関数 mcrypt_list_algorithms() を使用します
-------------------------- -------- -------------------------------------- -----
int mcrypt_enc_get_iv_size (resource $td)
この関数は、使用されるアルゴリズムの初期化ベクトル (IV) のサイズを返します (少し抽象的に見えます)。IV が次の場合は 0 を返します。アルゴリズムでは無視されます。
パラメータ $td は、mcrypt_module_open 関数の戻り値です。
------------------------------------------ ------ ------------------------------------
string mcrypt_create_iv ( int $ size [, int $source = MCRYPT_DEV_RANDOM ] )
この関数は初期化ベクトル (IV) を作成します
パラメータ:
$source には MCRYPT_RAND、MCRYPT_DEV_RANDOM、
MCRYPT_DEV_URANDOM を指定できます
注: PHP5。 3.0 以降、MCRYPT_RAND のみをサポート
戻り値:
成功した場合は、文字列の初期ベクトルが返されます。失敗した場合は、False が返されます。 ---------------------------------------------------- ------- ----------------
int mcrypt_enc_get_key_size ( resource $td )
この関数は、でサポートされている最大キー長 (バイト単位) を取得できます。現在のアルゴリズム
int mcrypt_generic_init ( resource $td , string $key , string $iv )
mcrypt_generic() または mdecrypt_generic() を呼び出す前に、まずこの関数を呼び出す必要があります。この関数はバッファの初期化に役立ちます。暗号化されたデータを保存します。
パラメータ $key: キーの長さ。$key の現在の値は、関数 mcrypt_enc_get_key_size() によって返される値より小さいことに注意してください。
質問: $key の値は大きいほど良いのですか?同級生会があれば、この質問に答えるのを手伝ってください。
------------------------------------------ ------ ------------------------------------
string mcrypt_generic ( resource $ td , string $data )
前の作業が完了したら、この関数を呼び出してデータを暗号化できます。
パラメータ $data: 暗号化するデータの内容
戻り値: 暗号化された暗号文を返す
--------------------- ----- -------------------------------------- ----- ----------
bool mcrypt_generic_deinit ( resource $td )
この関数は、現在使用されている暗号化モジュールをアンインストールするのに役立ちます。
戻り値
成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
---------- ----- -------------------------------------- ----- -
string mdecrypt_generic ( resource $td , string $data )
この関数はデータを復号化するために使用できます。
注: 復号化されたデータは実際のデータよりも長くなる可能性があり、後続のデータが存在する可能性があります。
class authCode {
public $ttl;//有効期限の時刻形式: 20120101 (年、月、日)
public $key_1;//Key 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->gt;mac_addr=$ this->getmac(PHP_OS) ;
$this->filepath="./licence.txt";
$this->ttl="20120619";//有効期限
$ this->salt="~! @#$";//暗号文のセキュリティを向上させるために使用されるソルト値
// echo "
1 |
|
/**
* 平文情報を暗号化します
* @param $key 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 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->ファイルパス));
$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);
//復号化後、後続の可能性があります

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











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

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

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

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 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

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

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP8では、一致式は、式の値に基づいて異なる結果を返す新しい制御構造です。 1)Switchステートメントに似ていますが、実行ステートメントブロックの代わりに値を返します。 2)一致式の式は厳密に比較され、セキュリティが向上します。 3)スイッチステートメントの脱落の可能性を回避し、コードのシンプルさと読みやすさを向上させます。
