Laravel의 암호화 서비스는 OpenSSL의 AES-256-CBC 암호화(또는 AES-128-CBC)를 사용해 값의 암호화·복호화를 단순한 인터페이스로 제공합니다.Laravel에서 암호화된 모든 값은 **메시지 인증 코드(MAC)**로 서명되어 있습니다.
따라서 암호화 후의 값이 변조되면 복호화할 수 없게 됩니다.
암호화를 사용하기 전에 config/app.php의 key 설정이 필요합니다.
이 값은 APP_KEY 환경 변수에서 읽어 들여집니다.php artisan key:generate 명령을 사용해 안전한 키를 생성해 주세요.
PHP의 시큐어한 난수 생성기를 사용해 암호학적으로 안전한 키가 생성됩니다.
php artisan key:generate
Laravel 설치 시에는 일반적으로 자동 생성됩니다. 생성된 키는 .env 파일에 저장됩니다.
암호화 키를 변경하면 인증된 모든 사용자 세션이 로그아웃됩니다.
Laravel은 세션 쿠키를 포함한 모든 쿠키를 암호화하고 있기 때문입니다.또한 이전 키로 암호화된 데이터는 복호화할 수 없게 됩니다.이 문제를 완화하기 위해 APP_PREVIOUS_KEYS에 오래된 키를 쉼표로 구분하여 나열할 수 있습니다.
Crypt 파사드의 decryptString 메서드로 암호화된 값을 복호화합니다.
MAC이 무효인 경우 등 정상적으로 복호화할 수 없을 때는 DecryptException이 던져집니다.
use Illuminate\Contracts\Encryption\DecryptException;use Illuminate\Support\Facades\Crypt;try { $decrypted = Crypt::decryptString($encryptedValue);} catch (DecryptException $e) { // 복호화 실패 시의 처리 abort(400, '유효하지 않은 데이터입니다.');}
Schema::create('profiles', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained(); $table->text('my_number')->nullable(); // 암호화된 값은 text로 저장 $table->text('bank_account')->nullable(); $table->timestamps();});