設定Configuration
Laravelの暗号化機能を使う前に、config/app.php
ファイルのkey
オプションへ32文字のランダム文字列を確実に設定してください。この値をしっかりと設定しないとLaravelにより暗号化される値は安全ではありません。Before using Laravel's encrypter, you should set the key
option of your config/app.php
configuration file to a 32 character, random string. If this value is not properly set, all values encrypted by Laravel will be insecure.
基本的な使用法Basic Usage
値の暗号化Encrypting A Value
値を暗号化するには、Crypt
ファサードが使用できます。暗号化にはいつでもOpenSSLが使用され、AES-256-CBC
アルゴリズムが行われます。さらに全暗号化値は変更を検出するためMACを使い署名されます。You may encrypt a value using the Crypt
facade[/docs/{{version}}/facades]. All encrypted values are encrypted using OpenSSL and the AES-256-CBC
cipher. Furthermore, all encrypted values are signed with a message authentication code (MAC) to detect any modifications to the encrypted string.
たとえば、secretを暗号化するためにencrypt
メソッドを使い、Eloquentモデルへ保存してみましょう。For example, we may use the encrypt
method to encrypt a secret and store it on an Eloquent model[/docs/{{version}}/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以外のクライアントが暗号化された値を受け取る場合、そのデータを非シリアライズする必要があるでしょう。Note: Encrypted values are passed through
serialize
during encryption, which allows for "encryption" of objects and arrays. Thus, non-PHP clients receiving encrypted values will need tounserialize
the data.
値の復号Decrypting A Value
当然ながらCrypt
ファサードのdecrypt
メソッドを使えば、暗号値を解読(復号)できます。MACが無効な場合など、その値が正しくない時はIlluminate\Contracts\Encryption\DecryptException
が投げられます。Of course, you may decrypt values using the decrypt
method on the Crypt
facade. If the value can not be properly decrypted, such as when the MAC is invalid, an Illuminate\Contracts\Encryption\DecryptException
will be thrown:
use Illuminate\Contracts\Encryption\DecryptException;
try {
$decrypted = Crypt::decrypt($encryptedValue);
} catch (DecryptException $e) {
//
}