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

Laravel中encrypt和decrypt的實現方法

這篇文章主要給大家介紹了關于Laravel中encrypt和decrypt的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一

前言

Laravel 的加密機制使用 OpenSSL 提供 AES-256 和 AES-128 的加密,本文將詳細介紹關于Laravel中encrypt和decrypt的實現,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

1. 使用方法

首先是生成秘鑰。要需要在.env目錄里提供APP_KEY,這個如果沒有的話,可以通過命令php artisan key:generate生成,也可以自己設置。生成后例子應該是這樣的

APP_KEY=base64:5BM1BXGOBrGeeqJMAWJZSzyzh5yPcCGOcOGPtUij65g=

在文件配置加密key和加密算法,在config/app.php的目錄里有配置

$ 'key' => env('APP_KEY'),
 
  'cipher' => 'AES-256-CBC',

使用方法,在laravel里已經有使用方法了,這里就不在過多的說了。主要使用的兩個方法,一個是encrypt的加密,一個是decrypt的解密

2. 查找加密解密的文件

實現方法的位置是在vendor/illuminate/encryption/的目錄下發現兩個文件,一個是EncryptionServiceProvider另外一個是Encrypter

3. 分析EncryptionServiceProvider文件

 public function register()
 {
  $this->app->singleton('encrypter', function ($app) {
   $config = $app->make('config')->get('app'); //從config/app.php里拿到配置文件

   if (Str::startsWith($key = $config['key'], 'base64:')) { //分析配置文件里的key里面有沒有帶'base64'
    $key = base64_decode(substr($key, 7)); //如果有的話,把key前面的base64:給取消,并且解析出原來的字符串
   }

   return new Encrypter($key, $config['cipher']); //實例化Encrypte類,注入到框架里
  });
 }

這個文件沒太多東西,但是通過這個我們可以看出,其實在配置文件的,我們能直接寫key,并且前面不帶base64也是可以解析。相當于省幾步操作

另外,在實例化類的時候,需要傳入key以及加密方式

4. 分析Encrypter文件

1. 分析__construct,在實例化之前執行

 public function __construct($key, $cipher = 'AES-128-CBC')
 {
  $key = (string) $key; //把key轉換為字符串

  if (static::supported($key, $cipher)) { //調用一個自定義的方法,用來判斷加密方式和要求的key長度是否一樣
   $this->key = $key;
   $this->cipher = $cipher;
  } else {
   throw new RuntimeException('The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths.');
  }
 }

上面的方法,主要是用來判斷加密方式和傳的key的長度是否相同,因為不同的加密方式,要求的相應的key的長度也是有要求的,具體每種加密方式要求key的長度可以查找對應的文檔

 public static function supported($key, $cipher)
 {
  $length = mb_strlen($key, '8bit'); //判斷key的字符的長度,按照8bit位的方式計算字符長度

  return ($cipher === 'AES-128-CBC' && $length === 16) ||
    ($cipher === 'AES-256-CBC' && $length === 32); //編碼格式為AES128的要求字符長度為16。編碼格式為AES256的要求字符長度為32位
 }

上面這個方法展現了一個嚴謹的地方,用了mb_strlen方法,并且要求計算長度是按照8bit位來計算的。這樣的好處是,不管是在哪種操作系統,計算的長度都是一樣的。

通過這個考慮到不同操作系統的情況,不會出現加密出現問題的情況。

2. 分析encrypt方法

 public function encrypt($value, $serialize = true)
 {
  $iv = random_bytes(16); //生成一個16位的隨機字符串
  
  
  // 使用openssl_encrypt把數據生成一個加密的數據
  // 1、判斷需要不需要生成一個可存儲表示的值,這樣做是為了不管你的數據是數組還是字符串都能給你轉成一個字符串,不至于在判斷你傳過來的數據是數組還是字符串了。
  // 2、使用openssl_encrypt。第一個參數是傳入數據,第二個參數是傳入加密方式,目前使用AES-256-CBC的加密方式,第三個參數是,返回加密后的原始數據,還是把加密的數據在經過一次base64的編碼,0的話表示base64位數據。第四個參數是項量,這個參數傳入隨機數,是為了在加密數據的時候每次的加密數據都不一樣。
  $value = \openssl_encrypt(
   $serialize ? serialize($value) : $value,
   $this->cipher, $this->key, 0, $iv
  ); //使用AES256加密內容

  if ($value === false) {
   throw new EncryptException('Could not encrypt the data.');
  }

  $mac = $this->hash($iv = base64_encode($iv), $value); //生成一個簽名,用來保證內容參數沒有被更改

  $json = json_encode(compact('iv', 'value', 'mac')); //把隨機碼,加密內容,已經簽名,組成數組,并轉成json格式

  if (! is_string($json)) {
   throw new EncryptException('Could not encrypt the data.');
  }

  return base64_encode($json); //把json格式轉換為base64位,用于傳輸
 }
【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

下面小編就為大家分享一篇laravel ORM 只開啟created_at的幾種方法總結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要給大家介紹了如何通過源碼解析Laravel的依賴注入的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關于Laravel中unique和exists驗證規則的優化的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面
最近在使用laravel5.5,利用其實現了一個功能,下面分享給大家,這篇文章主要給大家介紹了關于Laravel 5.5基于內置的Auth模塊如何實現前后臺登陸的相關資料,文中通過示例代碼介紹的非
laravel 的隊列服務對各種不同的后臺隊列服務提供了統一的 API,下面這篇文章通過源碼分析給大家介紹了關于 Laravel 重復執行同一個隊列任務的原因,文中通過示例代碼介紹的非常詳細
這篇文章主要給大家介紹了關于 Laravel Redis 多個進程同時取隊列問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友下面來
主站蜘蛛池模板: 久久久精品影院 | 91精品麻豆日日躁夜夜躁 | 国产精品永久 | 九色在线视频 | 亚洲一区在线日韩在线深爱 | 精品美女 | 福利精品 | 日韩精品欧美精品 | 婷婷色国产偷v国产偷v小说 | 欧美性吧 | 伊人精品在线 | 久久99成人 | 欧美成人激情视频 | 国产色片| 一级看片免费视频囗交动图 | 精品在线一区二区三区 | 亚洲高清在线免费观看 | 日韩在线免费视频 | 亚洲自拍一区在线观看 | 国产成人在线观看免费 | 久久高清免费视频 | 日韩欧美三级电影在线观看 | 日韩欧美三级在线 | 久久国 | 久操伊人 | 国产高清一区二区三区 | 国产精品国产a | 91亚洲国产亚洲国产 | 99久久亚洲 | 91精品久久 | 成人av在线大片 | 少妇特黄a一区二区三区88av | h在线看| 涩涩视频在线看 | 超碰精品在线观看 | 日韩欧美国产精品综合嫩v 一区中文字幕 | 美女视频三区 | 国产精品欧美一区二区三区不卡 | 精品免费视频一区二区 | 精品一区二区三 | 久久综合狠狠综合久久综合88 |