データの暗号化と復号化
PHP バージョンのアップグレードに伴い、暗号化および復号化機能などの一部の機能が廃止されました。PHP7.1 より前は mcrypt_decrypt() と mcrypt_encrypt() によって、PHP7.1 以降は openssl_decrypt() によって実装されていました。 openssl_encrypt() 復号化と暗号化を実装します。ここでは、カプセル化クラスを通じて、2 つの実装メソッドが実装されています:
暗号化および復号化ステップの 2 つのメソッド:
復号化時に元のデータを返す (配列--> 暗号化--> 暗号化された文字列--> ;復号化-->元の JSON 文字列-->暗号化-->暗号化された文字列-->復号化-->元の JSON 文字列-->暗号化-->暗号化された文字列 - ->復号化 -->元の文字列)
PHP7.1以下では
クラスメソッドを使用します
このクラスで注意する必要があるのは鍵です:アルゴリズムに対応する鍵の長さ:AES -128、192、および 256 暗号化キーの長さは、それぞれ 16、24、および 32 ビットです
<?php namespace aes; class AesT { private $_bit = MCRYPT_RIJNDAEL_256; private $_type = MCRYPT_MODE_CBC; private $_key = 'ThisIsYourAesKey'; // 密钥 必须16位 24位 32位 private $_use_base64 = true; private $_iv_size = null; private $_iv = null; /** * @param string $_key 密钥 * @param int $_bit 默认使用128字节 支持256、192、128 * @param string $_type 加密解密方式 默认为ecb 支持cfb、cbc、nofb、ofb、stream、ecb * @param boolean $_use_base64 默认使用base64二次加密 */ public function __construct($_key = '', $_bit = 128, $_type = 'ecb', $_use_base64 = true) { // 加密字节 if (192 === $_bit) { $this->_bit = MCRYPT_RIJNDAEL_192; } elseif (128 === $_bit) { $this->_bit = MCRYPT_RIJNDAEL_128; } else { $this->_bit = MCRYPT_RIJNDAEL_256; } // 加密方法 if ('cfb' === $_type) { $this->_type = MCRYPT_MODE_CFB; } elseif ('cbc' === $_type) { $this->_type = MCRYPT_MODE_CBC; } elseif ('nofb' === $_type) { $this->_type = MCRYPT_MODE_NOFB; } elseif ('ofb' === $_type) { $this->_type = MCRYPT_MODE_OFB; } elseif ('stream' === $_type) { $this->_type = MCRYPT_MODE_STREAM; } else { $this->_type = MCRYPT_MODE_ECB; } // 密钥 if (!empty($_key)) { $this->_key = $_key; } // 是否使用base64 $this->_use_base64 = $_use_base64; $this->_iv_size = mcrypt_get_iv_size($this->_bit, $this->_type); $this->_iv = mcrypt_create_iv($this->_iv_size, MCRYPT_RAND); } /** * 加密 * @param string $string 待加密字符串 * @return string */ public function encode($string) { // if (MCRYPT_MODE_ECB === $this->_type) { $encodeString = mcrypt_encrypt($this->_bit, $this->_key, json_encode($string), $this->_type); } else { $encodeString = mcrypt_encrypt($this->_bit, $this->_key, json_encode($string), $this->_type, $this->_iv); } if ($this->_use_base64) { $encodeString = base64_encode($encodeString); } return $encodeString; } /** * 解密 * @param string $string 待解密字符串 * @return string */ public function decode($string) { if ($this->_use_base64) { $string = base64_decode($string); } if (MCRYPT_MODE_ECB === $this->_type) { $decodeString = mcrypt_decrypt($this->_bit, $this->_key, $string, $this->_type); } else { $decodeString = mcrypt_decrypt($this->_bit, $this->_key, $string, $this->_type, $this->_iv); } return $decodeString; } }
Use
<?php use aes\AesT; class Test{ public function index() { $data1 = ['status' => '1', 'info' => 'success', 'data' => [['id' => 1, 'name' => '大房间', '2' => '小房间']]]; //$data2 = '{"status":"1","info":"success","data":[{"id":1,"name":"\u5927\u623f\u95f4","2":"\u5c0f\u623f\u95f4"}]}'; //$data3 = 'PHP AES cbc模式 pkcs7 128加密解密'; $objT = new AesT(); $resT = $objT->encode($data1);//加密数据 var_dump($resT); var_dump($objT->decode($resT));//解密 } }
PHP7.1 以降では use
クラスメソッド
AES-128-CBC、AES-192-CBC、AES-256-CBCの暗号化キーの長さはそれぞれ16、24、32ビットです
openss私_encrypt () の 4 つのパラメーターのうち、4 番目のパラメーターに注意する必要があります:
0: プレーン テキストを自動的にパディングし、返されるデータは Base64 でエンコードされます。
1: OPENSSL_RAW_DATA、自動的にパディングします。プレーンテキストですが、返された結果は Base64 でエンコードされていません。
2 : OPENSSL_ZERO_PADDING, 自动对明文进行 0 填充, 返回的结果经过 base64 编码
<?php namespace aes; class Aes { public static $key = ''; public static $iv = ''; public static $method = ''; public function __construct() { //加密key self::$key = md5('AeSNJkBfhHmJqLzHL', true); //保证偏移量为16位 self::$iv = md5('HfgUdCliBjKjuRfa', true); //加密方式 # AES-128-CBC AES-192-CBC AES-256-CBC self::$method = 'AES-128-CBC'; } /** * @desc 加密 * @param $data * @return false|string */ public function aesEn($data) { return base64_encode(openssl_encrypt(json_encode($data), self::$method, self::$key, OPENSSL_RAW_DATA, self::$iv)); } /** * @desc 解密 * @param $data * @return false|string */ public function aesDe($data) { $tmpData = openssl_decrypt(base64_decode($data), self::$method, self::$key, OPENSSL_RAW_DATA, self::$iv); return is_null(json_decode($tmpData)) ? $tmpData : json_decode($tmpData, true); } }
使用
<?php use aes\Aes; class Test { public function aes() { $obj = new Aes(); $data = ['status' => '1', 'info' => 'success', 'data' => [['id' => 1, 'name' => '大房间', '2' => '小房间']]]; //$data = '{"status":"1","info":"success","data":[{"id":1,"name":"\u5927\u623f\u95f4","2":"\u5c0f\u623f\u95f4"}]}'; //$data = 'PHP AES cbc模式 pkcs7 128加密解密'; $res = $obj->aesEn($data);//加密数据 var_dump($res); var_dump($obj->aesDe($res));//解密 } }
使用该加密解密类时,如果将两个类整合到一个类中,需要通过PHP_VERSION获取当前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クライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

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

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。
