Laravel - 加密



加密是使用某些演算法將純文字轉換為訊息的過程,以便任何第三方使用者都無法讀取資訊。這對於傳輸敏感資訊非常有用,因為入侵者攻擊傳輸資訊的可能性較小。

加密是透過稱為密碼學的過程執行的。要加密的文字稱為明文,加密後獲得的文字或訊息稱為密文。將密文轉換為明文的過程稱為解密

Laravel 使用AES-256AES-128 加密器,它使用 OpenSSL 進行加密。Laravel 中包含的所有值都使用訊息認證碼協議進行簽名,以便一旦加密,底層值就不會被篡改。

配置

在 Laravel 中生成金鑰的命令如下所示:

php artisan key:generate

請注意,此命令使用 PHP 安全隨機位元組生成器,您可以看到如下所示的輸出截圖:

Artisan Key

上面給出的命令有助於生成可在 Web 應用程式中使用的金鑰。請觀察下面的截圖:

注意

加密值在config/app.php檔案中正確對齊,其中包括兩個加密引數,即keycipher。如果使用此金鑰的值未正確對齊,則 Laravel 中加密的所有值都將不安全。

加密過程

可以使用 Laravel 類控制器的encrypt 輔助函式來加密值。這些值使用 OpenSSL 和 AES-256 密碼進行加密。所有加密的值都使用訊息認證碼 (MAC) 進行簽名,以檢查加密字串是否有任何修改。

defaultCommand

以下程式碼在控制器中提及,用於儲存秘密或敏感訊息。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class DemoController extends Controller{
   **
      * Store a secret message for the user.
      *
      * @param Request $request
      * @param int $id
      * @return Response
   */
   
   public function storeSecret(Request $request, $id) {
      $user = User::findOrFail($id);
      $user->fill([
         'secret' => encrypt($request->secret)
      ])->save();
   }
}

解密過程

值的解密使用decrypt 輔助函式完成。觀察以下程式碼:

use Illuminate\Contracts\Encryption\DecryptException;

// Exception for decryption thrown in facade
try {
   $decrypted = decrypt($encryptedValue);
} catch (DecryptException $e) {
   //
}

請注意,如果由於使用了無效的 MAC 而解密過程不成功,則會丟擲相應的異常。

廣告
© . All rights reserved.