Skip to main content

Crypt 파사드란

Laravel의 암호화 서비스는 OpenSSL의 AES-256-CBC 암호화(또는 AES-128-CBC)를 사용해 값의 암호화·복호화를 단순한 인터페이스로 제공합니다. Laravel에서 암호화된 모든 값은 **메시지 인증 코드(MAC)**로 서명되어 있습니다. 따라서 암호화 후의 값이 변조되면 복호화할 수 없게 됩니다.

설정

APP_KEY 생성

암호화를 사용하기 전에 config/app.phpkey 설정이 필요합니다. 이 값은 APP_KEY 환경 변수에서 읽어 들여집니다. php artisan key:generate 명령을 사용해 안전한 키를 생성해 주세요. PHP의 시큐어한 난수 생성기를 사용해 암호학적으로 안전한 키가 생성됩니다.
Laravel 설치 시에는 일반적으로 자동 생성됩니다. 생성된 키는 .env 파일에 저장됩니다.
APP_KEY는 절대로 공개하지 마세요. 이 키가 유출되면 암호화된 데이터가 모두 복호화되어 버립니다.

암호화 키 로테이션

암호화 키를 변경하면 인증된 모든 사용자 세션이 로그아웃됩니다. Laravel은 세션 쿠키를 포함한 모든 쿠키를 암호화하고 있기 때문입니다. 또한 이전 키로 암호화된 데이터는 복호화할 수 없게 됩니다. 이 문제를 완화하기 위해 APP_PREVIOUS_KEYS에 오래된 키를 쉼표로 구분하여 나열할 수 있습니다.
Laravel은 암호화에는 항상 현재 키를 사용하지만, 복호화 시에는 현재 키로 실패한 경우에 오래된 키를 순서대로 시도합니다. 이를 통해 키 로테이션 중에도 사용자는 애플리케이션을 계속해서 사용할 수 있습니다.

암호화

Crypt 파사드의 encryptString 메서드를 사용해 값을 암호화합니다. 암호화된 값은 OpenSSL과 AES-256-CBC 암호를 사용하며, MAC으로 서명됩니다.
encryptString은 시리얼라이즈 없이 문자열을 암호화합니다. 객체나 배열을 암호화하는 경우에는 encrypt를 사용해 주세요.

복호화

Crypt 파사드의 decryptString 메서드로 암호화된 값을 복호화합니다. MAC이 무효인 경우 등 정상적으로 복호화할 수 없을 때는 DecryptException이 던져집니다.

모델 캐스트

Eloquent 모델에서 encrypted 캐스트를 사용하면 속성의 암호화·복호화를 자동으로 수행할 수 있습니다.
캐스트를 설정하면 모델에 값을 대입·가져올 때 자동으로 암호화·복호화됩니다.
encrypted:* 캐스트는 내부적으로 Crypt::encryptCrypt::decrypt를 사용합니다. 데이터베이스 컬럼 타입은 text 또는 longText를 권장합니다.

실용 예시: 개인정보의 암호화 저장

개인정보(주민등록번호, 신용카드 번호 등)를 데이터베이스에 안전하게 저장하는 전형적인 패턴입니다.

마이그레이션

모델

컨트롤러


정리

다음 단계

해시

비밀번호의 안전한 해시화와 검증 방법을 배웁니다.

인가

폴리시와 게이트를 사용한 접근 제어를 설명합니다.
마지막 수정일 2026년 7월 13일