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

laravel 5.3中自定義加密服務(wù)的方案詳解

這篇文章主要給大家介紹了在laravel 5.3中自定義加密服務(wù)的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用laravel 5.3具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。

前言

本文介紹的是laravel 5.3中自定義加密服務(wù)的方案,利用laravel的服務(wù)容器,實(shí)現(xiàn)自定義加密服務(wù)注冊(示例是支持長字符串的RSA加密),下面來看看詳細(xì)的介紹:

創(chuàng)建加密解密服務(wù)類

文件地址 /app/Service/Common/CryptService.php 代碼如下

下面這個(gè)是個(gè)人寫的支持長字符串的RSA加密類作為示例,自定義加密的話只需更改這個(gè)文件的代碼就好,其它操作只是為了實(shí)現(xiàn)依賴注入。

<?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;
 }
}

創(chuàng)建門面facades

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

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

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

注冊服務(wù)

創(chuàng)建文件 /app/Providers/MyCryptServiceProvider.php 代碼如下:

其實(shí)也可以在AppServiceProvider中注冊,就不用另外建個(gè)MyCryptServiceProvider.php文件了

而且在/config/app.php中一般也已經(jīng)有了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);
 }
}

在配置中聲明

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

本篇文章給大家詳細(xì)介紹了PHP開發(fā)接口使用RSA進(jìn)行加密解密方法,對(duì)此有興趣的朋友可以學(xué)習(xí)下。
下面小編就為大家分享一篇PHP給源代碼加密的幾種方法匯總(推薦),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了php實(shí)現(xiàn)的AES加密類定義與用法,結(jié)合完整實(shí)例形式分析了基于php的AES加密類實(shí)現(xiàn)及使用方法,需要的朋友可以參考下
下面小編就為大家分享一篇laravel ORM 只開啟created_at的幾種方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要給大家介紹了如何通過源碼解析Laravel的依賴注入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關(guān)于Laravel中unique和exists驗(yàn)證規(guī)則的優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面
主站蜘蛛池模板: 国产精品久久久精品 | 久久午夜国产精品www忘忧草 | 懂色一区二区三区免费观看 | 玖玖国产 | 黄色片免费看视频 | 久久丝袜 | 日韩一级免费电影 | 午夜精品久久久久久 | 噜噜噜噜狠狠狠7777视频 | 中文字幕在线免费观看 | 成人黄色电影在线播放 | av一区二区三区在线观看 | av在线免费网站 | 国产91av视频 | www.久久精品视频 | 日本一区二区在线视频 | 男女视频在线观看免费 | 国产一区二区三区视频 | 暖暖成人免费视频 | 伊人一区 | 国产成人精品免费视频大全最热 | 欧美一级二级三级视频 | 日本精品国产 | 欧美激情综合网 | 91伊人 | 久久专区| 99精品视频在线 | 91精品国产综合久久香蕉922 | 亚洲91精品 | 中文字幕在线一区 | 日本一区二区三区四区 | 在线一区二区国产 | 国产一区二区在线播放视频 | 亚洲精色 | 一呦二呦三呦国产精品 | 91亚洲精品国偷拍自产在线观看 | 91久久精品一区二区二区 | 国产欧美一区二区三区日本久久久 | 精品国产欧美一区二区 | 久久精品国产99国产精品 | 97在线观视频免费观看 |