基本
Laravel の暗号化は、 .env
で設定された APP_KEY=base64:XXXXXX
をシークレットとして使用します。暗号化時のこの値を忘れると復号できなくなるので注意してください。
シリアライズして任意の型を暗号化
use Illuminate\Support\Facades\Crypt;
$encrypted= Crypt::encrypt(['foo' => 'bar']);
dump($encrypted );
/*
Base64エンコードされた暗号化結果が出力される
*/
$decrypted = Crypt::decrypt($encrypted);
dump($decrypted);
/*
array:1 [
"foo" => "bar"
]
*/
- メリット: 任意の値を暗号化できる
- デメリット: 他のアプリケーションとの相互運用性が低い(PHPにべっとり依存している)
シリアライズせずに文字列だけを暗号化
use Illuminate\Support\Facades\Crypt;
$encrypted= Crypt::encryptString('foo');
dump($encrypted);
/*
Base64エンコードされた暗号化結果が出力される
*/
$decrypted = Crypt::decryptString($encrypted);
dump($decrypted);
/*
"foo"
*/
- メリット: 他のアプリケーションとの相互運用性が高い
- デメリット: 型が文字列に限定される
応用
特定のモデルのフィールドを自動で暗号化・複合する
ユーザモデルの last_name フィールドを暗号化する例
public function getLastNameAttribute(): string
{
return Crypt::decrypt($this->attributes['last_name']);
}
public function setLastNameAttribute(string $value): void
{
$this->attributes['last_name'] = Crypt::encypt($value);
}
```
````php:ユーザモデルの last_name フィールドを暗号化する例<br><strong>(<code>null</code>を認める場合)</strong>
public function getLastNameAttribute(): ?string
{
return isset($this->attributes['last_name'])
? Crypt::decrypt($this->attributes['last_name'])
: null;
}
public function setLastNameAttribute(?string $value): void
{
$this->attributes['last_name'] = $value !== null
? Crypt::encrypt($value)
: null;
}
```
**またメモすることがあれば追記します。**