laravelで暗号化サービスをカスタマイズするにはどうすればよいですか?この記事では主に、laravel 5.3 での暗号化サービスのカスタマイズに関する関連情報を紹介します。この記事の紹介は非常に詳細であり、laravel 5.3 を学習または使用する人にとって一定の参考学習価値があります。必要な方は以下を参照してください。お役に立てれば幸いです。
前書き
この記事では、laravelのサービスコンテナを使用してカスタム暗号化サービス登録を実装する、laravel 5.3のカスタム暗号化サービスのソリューションを紹介します(例は、長い文字列をサポートするRSA暗号化です)。以下を参照してください。詳細な紹介を参照してください。 :
暗号化と復号化のサービスクラスを作成します
ファイルアドレス/app/Service/Common/CryptService.php コードは次のとおりです
以下はサポートする人が書いたRSA暗号化クラスです長い文字列 たとえば、暗号化をカスタマイズする場合は、このファイルのコードを変更するだけで済み、他の操作は依存関係の挿入を実装するだけです。
<?php namespace App\Service\Common; class CryptService { public $config,$keypath, $prikey_path, $pubkey_path, $prikey, $pubkey , $private_key_size; public function select($select = 'rsa_api') { $config = config('crypt'); if (array_key_exists($select, $config)) { $this->config = $config[$select]; $this->private_key_size = $this->config['openssl_config']['private_key_bits']; } else { return false; } $this->keypath = dirname(dirname(dirname(__DIR__))) . $this->config['path']; if(!file_exists($this->keypath)){ mkdir($this->keypath,"0777",true); } $this->prikey_path = $this->keypath . $this->config['private_key_file_name']; $this->pubkey_path = $this->keypath . $this->config['public_key_file_name']; if (file_exists($this->prikey_path)) $this->prikey = file_get_contents($this->prikey_path); if (file_exists($this->pubkey_path)) $this->pubkey = file_get_contents($this->pubkey_path); return $this; } public function makeKey() { $res = openssl_pkey_new($this->config['openssl_config']); openssl_pkey_export($res, $this->prikey); file_put_contents($this->prikey_path, $this->prikey); $pubkey = openssl_pkey_get_details($res); $this->pubkey = $pubkey['key']; file_put_contents($this->pubkey_path, $this->pubkey); return $test = ['prikey' => $this->prikey, 'pubkey' => $this->pubkey]; } public function encryptPrivate($data){ $crypt = $this->encrypt_split($data); $crypted = ''; foreach ($crypt as $k=>$c){ if($k!=0) $crypted.="@"; $crypted.=base64_encode($this->doEncryptPrivate($c)); } return $crypted; } public function encryptPublic($data){ $crypt = $this->encrypt_split($data); $crypted = ''; foreach ($crypt as $k=>$c){ if($k!=0) $crypted.="@"; $crypted.=base64_encode($this->doEncryptPublic($c)); } return $crypted; } public function decryptPublic($data){ $decrypt = explode('@',$data); $decrypted = ""; foreach ($decrypt as $k=>$d){ $decrypted .= $this->doDecryptPublic(base64_decode($d)); } return $decrypted; } public function decryptPrivate($data){ $decrypt = explode('@',$data); $decrypted = ""; foreach ($decrypt as $k=>$d){ $decrypted .= $this->doDecryptPrivate(base64_decode($d)); } return $decrypted; } private function encrypt_split($data){ $crypt=[];$index=0; for($i=0; $i<strlen($data); $i+=117){ $src = substr($data, $i, 117); $crypt[$index] = $src; $index++; } return $crypt; } private function doEncryptPrivate($data) { $rs = ''; if (@openssl_private_encrypt($data, $rs, $this->prikey) === FALSE) { return NULL; } return $rs; } private function doDecryptPrivate($data) { $rs = ''; if (@openssl_private_decrypt($data, $rs, $this->prikey) === FALSE) { return null; } return $rs; } private function doEncryptPublic($data){ $rs = ''; if (@openssl_public_encrypt($data, $rs, $this->pubkey) === FALSE) { return NULL; } return $rs; } private function doDecryptPublic($data) { $rs = ''; if (@openssl_public_decrypt($data, $rs, $this->pubkey) === FALSE) { return null; } return $rs; } }
ファサードの作成
ファイルアドレス/app/Facades/CryptFacades.php コードは次のとおりです:
<?php namespace App\Facades; use \Illuminate\Support\Facades\Facade; class CryptFacades extends Facade{ public static function getFacadeAccessor() { return 'MyCrypt'; } }
サービスの登録
Create file/app/Providers/ MyCryptServicePro プロバイダー。 php コードは次のとおりです:
実際、AppServiceProvider に登録することもできるため、別の MyCryptServiceProvider.php ファイルを作成する必要はありません
そして、通常は /config/app.php
に AppServiceProvider 宣言があります。<?php namespace App\Providers; use App\Service\Common\CryptService; use Illuminate\Support\ServiceProvider; class MyCryptServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { // } /** * Register the application services. * * @return void */ public function register() { \App::bind('MyCrypt',CryptService::class); } }
設定内で
ファイルアドレス/config/app.php を宣言します。
'providers' => [ \App\Providers\MyCryptServiceProvider::class, ], 'aliases' => [ 'MyCrypt' => \App\Facades\CryptFacades::class, ]
を Providershe と aliases に追加して、カスタム暗号化および復号化サービス設定ファイルを作成します
/config/crypt CryptServiceを書いたので.php 設定ファイルを使用するので、別途設定ファイルを追加する必要があります。実際のプロジェクトでは、必要に応じて構成ファイルと暗号化サービス クラスをセットアップできます。
<?php //基于laravel根目录,分隔符最好是用 DIRECTORY_SEPARATOR 常量代替 return [ 'rsa_api' => [ 'path'=>DIRECTORY_SEPARATOR.'storage'.DIRECTORY_SEPARATOR.'rsakey'.DIRECTORY_SEPARATOR, 'private_key_file_name'=>'private_key.pem', 'public_key_file_name' =>'public_key.pem', 'openssl_config'=>[ "digest_alg" => "sha512", "private_key_bits" => 1024, "private_key_type" => OPENSSL_KEYTYPE_RSA, ] ], 'rsa_data'=>[ 'path'=>DIRECTORY_SEPARATOR.'storage'.DIRECTORY_SEPARATOR.'rsakey'.DIRECTORY_SEPARATOR, 'private_key_file_name'=>'private.pem', 'public_key_file_name' =>'public.pem', 'openssl_config'=>[ "digest_alg" => "sha512", "private_key_bits" => 1024, "private_key_type" => OPENSSL_KEYTYPE_RSA, ] ] ];
Controllerで使用される例
1. 職人によるコントローラファイルの作成
php artisan make:controller IndexController
3. /routes/web.phpのルーティングを追加します。 りー
4. ブラウザアクセスの検証結果関連する推奨事項:
Laravel のミドルウェアがどのように実装されているかを調べる
laravel の APP インターフェイス (API) の作成
改善のための実践的なヒントLaravel 5のパフォーマンス
以上がLaravelで暗号化サービスをカスタマイズする方法を説明するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。