詳解PHP laravel中的加密與解密函數
目錄
- 一:簡介
- 二:配置
- 三:使用加密/解密
- 1:加密
- 2:不使用序列化進行加密
- 3:解密
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加密 解密內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持
