設定
Laravelの暗号化機能を使う前に、config/app.php
ファイルのkey
オプションへ32文字のランダム文字列を確実に設定してください。この値をしっかりと設定しないとLaravelにより暗号化される値は安全ではありません。
基本的な使用法
値の暗号化
値を暗号化するには、Crypt
ファサードが使用できます。暗号化にはいつでもOpenSSLが使用され、AES-256-CBC
アルゴリズムが行われます。さらに全暗号化値は変更を検出するためMACを使い署名されます。
たとえば、secretを暗号化するためにencrypt
メソッドを使い、Eloquentモデルへ保存してみましょう。
<?php
namespace App\Http\Controllers;
use Crypt;
use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
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' => Crypt::encrypt($request->secret)
])->save();
}
}
注意: 暗号化の過程で、値は「シリアライズ」されています。これにより、オブジェクトや配列も暗号化できます。そのため、PHP以外のクライアントが暗号化された値を受け取る場合、そのデータを非シリアライズする必要があるでしょう。
値の復号
当然ながらCrypt
ファサードのdecrypt
メソッドを使えば、暗号値を解読(復号)できます。MACが無効な場合など、その値が正しくない時はIlluminate\Contracts\Encryption\DecryptException
が投げられます。
use Illuminate\Contracts\Encryption\DecryptException;
try {
$decrypted = Crypt::decrypt($encryptedValue);
} catch (DecryptException $e) {
//
}