久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

laravel 5.3中自定義加密服務的方案詳解

這篇文章主要給大家介紹了在laravel 5.3中自定義加密服務的相關資料,文中介紹的非常詳細,對大家學習或者使用laravel 5.3具有一定的參考學習價值,需要的朋友們下面來一起看看吧。

前言

本文介紹的是laravel 5.3中自定義加密服務的方案,利用laravel的服務容器,實現自定義加密服務注冊(示例是支持長字符串的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;
 }
}

創建門面facades

文件地址 /app/Facades/CryptFacades.php 代碼如下:

<?php
namespace App\Facades;
use \Illuminate\Support\Facades\Facade;

class CryptFacades extends Facade{
 public static function getFacadeAccessor()
 {
  return 'MyCrypt';
 }
}

注冊服務

創建文件 /app/Providers/MyCryptServiceProvider.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);
 }
}

在配置中聲明

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

本篇文章給大家詳細介紹了PHP開發接口使用RSA進行加密解密方法,對此有興趣的朋友可以學習下。
下面小編就為大家分享一篇PHP給源代碼加密的幾種方法匯總(推薦),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了php實現的AES加密類定義與用法,結合完整實例形式分析了基于php的AES加密類實現及使用方法,需要的朋友可以參考下
下面小編就為大家分享一篇laravel ORM 只開啟created_at的幾種方法總結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要給大家介紹了如何通過源碼解析Laravel的依賴注入的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關于Laravel中unique和exists驗證規則的優化的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面
主站蜘蛛池模板: 日韩欧美视频在线 | 亚洲国产免费 | 国产一区二区三区精品久久久 | 黄色免费网站在线看 | 日本欧美视频 | 日日干夜夜干 | 日韩三级一区 | 成人a免费 | 日韩欧美一区二区三区在线播放 | www.一区二区 | 国产精品美女 | 亚洲精品久久久久久久久久久久久 | 在线观看日韩精品视频 | 97精品超碰一区二区三区 | 91社区在线观看 | 视频一区二区三区中文字幕 | 亚洲国产精品久久久久秋霞不卡 | 亚洲精品在线观看网站 | 黄色一级免费 | 激情欧美日韩一区二区 | 中文字幕日韩一区 | 欧美日韩一区精品 | 欧美日韩在线一区二区 | 久久久久久久91 | 国产精品久久精品 | 99精品在线免费观看 | 久久毛片| 一区二区三区四区在线 | 91精品国产乱码久久久久久久 | 精品视频免费在线 | 免费一级欧美在线观看视频 | 一区二区亚洲 | 国产精品久久久久久二区 | 蜜桃特黄a∨片免费观看 | 国产精品综合久久 | 手机在线观看av | 91性高湖久久久久久久久_久久99 | www.国产视频| 日韩一二区在线 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 国产精品一区二区欧美黑人喷潮水 |