본문으로 건너뛰기
버전: 10.x

암호화 (Encryption)

소개

라라벨의 암호화 서비스는 OpenSSL을 기반으로 AES-256과 AES-128 암호화를 통해 텍스트를 암호화하고 복호화할 수 있는 쉽고 편리한 인터페이스를 제공합니다. 라라벨에서 암호화된 모든 값들은 메시지 인증 코드(MAC, Message Authentication Code)로 서명되어, 한 번 암호화된 이후에는 그 값이 외부에서 임의로 변경되거나 위조될 수 없도록 보호합니다.

설정

라라벨의 Encrypter를 사용하기 전에, config/app.php 설정 파일에서 key 설정 옵션을 반드시 지정해야 합니다. 이 설정 값은 APP_KEY 환경 변수에 의해 결정됩니다. 이 변수의 값을 생성할 때는 php artisan key:generate 명령어를 사용하는 것이 좋습니다. key:generate 명령어는 PHP의 보안 랜덤 바이트 생성기를 활용하여, 애플리케이션에 적합한 암호화 키를 안전하게 생성해줍니다. 일반적으로, APP_KEY 환경 변수의 값은 라라벨 설치 과정에서 자동으로 생성됩니다.

Encrypter 사용하기

값 암호화하기

Crypt 파사드에서 제공하는 encryptString 메서드를 사용해 값을 암호화할 수 있습니다. 암호화된 모든 값은 OpenSSL을 사용하고, AES-256-CBC 암호화 방식을 적용합니다. 또한 모든 암호화 값은 메시지 인증 코드(MAC)로 서명됩니다. 내장된 메시지 인증 코드를 통해, 사용자가 악의적으로 값을 변조했다면 해당 값의 복호화가 불가능해지므로 안전하게 보호할 수 있습니다.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Crypt;

class DigitalOceanTokenController extends Controller
{
/**
* Store a DigitalOcean API token for the user.
*/
public function store(Request $request): RedirectResponse
{
$request->user()->fill([
'token' => Crypt::encryptString($request->token),
])->save();

return redirect('/secrets');
}
}

값 복호화하기

암호화된 값을 복호화하려면 Crypt 파사드에서 제공하는 decryptString 메서드를 사용하면 됩니다. 만약 메시지 인증 코드(MAC)가 올바르지 않거나, 다른 이유로 값이 정상적으로 복호화되지 않으면 Illuminate\Contracts\Encryption\DecryptException 예외가 발생합니다.

use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Crypt;

try {
$decrypted = Crypt::decryptString($encryptedValue);
} catch (DecryptException $e) {
// ...
}