38
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

暗号化・復号を Laravel で行う

Last updated at Posted at 2019-12-11

基本

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:ユーザモデルの&#32last_name&#32;フィールドを暗号化する例<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;
}
```

**またメモすることがあれば追記します**
38
34
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?