首頁 > 軟體

詳解PHP laravel中的加密與解密函數

2022-10-23 18:00:46

Laravel為我們提供了完整的加密方法及加密模式。

我之前一般在加密的時候使用的是我自己寫的加密函數,但是這個玩意,有的位置還是不太使用,當然,破解的話,基本上也是不可能的。具體請移步《php加密函數與解密函數

這裡具體看下laravel為我們提供的加密及解密方法。

一:簡介

Laravel 的加密器使用 OpenSSL 來提供 AES-256 和 AES-128 加密。強烈建議使用 Laravel 自帶的加密設定,不要嘗試推出自己“土生土長”的加密演演算法。所有 Laravel 加密過的值都使用訊息授權碼(MAC)進行簽名以便底層值一經加密就不能修改。

二:設定

在使用 Laravel 的加密器之前,必須在組態檔 config/app.php 中設定 key 選項為 32 位隨機字串。可以使用 php artisan key:generate 命令來生成這個key,該 Artisan 命令會使用 PHP 的安全隨機位元組生成器來構建 key 的值。如果這個值沒有被設定,所有 Laravel 加密過的值都是不安全的。

三:使用加密/解密

1:加密

你可以使用輔助函數 encrypt 對資料進行加密,所有加密值都使用 OpenSSL 和 AES-256-CBC 密碼(cipher)進行加密。此外,所有加密值都通過一個訊息鑑別碼(MAC)來進行簽名以防止對加密字串的任何修改。

<?php
 
namespace AppHttpControllers;
 
use AppUser;
use IlluminateHttpRequest;
use AppHttpControllersController;
 
class UserController extends Controller
{
    /**
     * 儲存使用者安全資訊.
     *
     * @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();
    }
}

2:不使用序列化進行加密

加密值在加密期間都會經過序列化函數 serialize 進行處理,從而允許對物件和陣列的加密。因此,非 PHP 使用者端接收的加密資料需要進行 unserialize 反序列化。如果你想要在加密和解密資料時不進行序列化操作,可以使用 Crypt 門面提供的 encryptString 和 decryptString 方法:

use IlluminateSupportFacadesCrypt;
 
$encrypted = Crypt::encryptString('Hello world.');
 
$decrypted = Crypt::decryptString($encrypted);

3:解密

你可以使用輔助函數 decrypt 對加密資料進行解密。如果該值不能被解密,例如 MAC 無效,將會丟擲一個IlluminateContractsEncryptionDecryptException異常:

use IlluminateContractsEncryptionDecryptException;
 
try {
    $decrypted = decrypt($encryptedValue);
} catch (DecryptException $e) {
    //
}

以上大概就是laravel為我們提供的加密/解密函數

到此這篇關於詳解PHP laravel中的加密與解密函數的文章就介紹到這了,更多相關PHP laravel加密 解密內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com


IT145.com E-mail:sddin#qq.com