> PHP 프레임워크 > Laravel > Laravel의 데이터 암호화 및 복호화

Laravel의 데이터 암호화 및 복호화

PHP中文网
풀어 주다: 2024-12-12 09:59:58
앞으로
947명이 탐색했습니다.

이 가이드에서는 암호화 및 복호화 구현 방법을 설명합니다. Laravel 모델의 민감한 데이터. 다음 단계를 수행하면 다음을 수행할 수 있습니다. 데이터를 데이터베이스에 저장하기 전에 보안을 유지하고 저장 시 암호를 해독합니다. 검색 중입니다.

   전제 조건

  • Laravel: Laravel 프로젝트를 사용하고 있는지 확인하세요.
  • 암호화 키: Laravel은 .env 파일에 APP_KEY를 자동으로 생성합니다. 이 키는 Laravel의 암호화 서비스에서 사용됩니다.

   1단계: 모델에서 암호화 설정

모델에서는 Laravel의 encrypt() 및 decrypt() 함수를 사용하여 지정된 필드에 대한 암호화 및 복호화를 자동으로 처리합니다.

   Doctor Model

암호화 및 복호화 방법을 사용하여 Doctor 모델을 생성하거나 업데이트합니다. first_name, last_name, email, mobile 등의 필드를 데이터베이스에 저장하기 전에 암호화합니다.

<?phpnamespace  AppModels;use IlluminateDatabaseEloquentModel;use IlluminateSupportFacadesCrypt;class Doctor extends Model{
    protected $fillable = [
        &#39;first_name&#39;, &#39;last_name&#39;, &#39;email&#39;, &#39;mobile&#39;, &#39;hashed_email&#39;, &#39;password&#39;
    ];

    // Automatically encrypt attributes when setting them
    public function setFirstNameAttribute($value)
    {
        $this->attributes['first_name'] = encrypt($value);
    }

    public function setLastNameAttribute($value)
    {
        $this->attributes['last_name'] = encrypt($value);
    }

    public function setEmailAttribute($value)
    {
        $this->attributes['email'] = encrypt($value);
    }

    public function setMobileAttribute($value)
    {
        $this->attributes['mobile'] = encrypt($value);
    }

    // Automatically decrypt attributes when getting them
    public function getFirstNameAttribute($value)
    {
        return decrypt($value);
    }

    public function getLastNameAttribute($value)
    {
        return decrypt($value);
    }

    public function getEmailAttribute($value)
    {
        return decrypt($value);
    }

    public function getMobileAttribute($value)
    {
        return decrypt($value);
    }}
로그인 후 복사
로그인 후 복사

     설명

  • Setter 방법: set{AttributeName 사용 }데이터가 데이터베이스에 저장되기 전에 데이터를 암호화하는 속성().
  • Getter 방법: 데이터베이스에서 데이터를 검색할 때 get{AttributeName}Attribute()를 사용하여 데이터를 해독합니다.

2단계: 데이터 저장 및 검색을 위한 컨트롤러

컨트롤러에서 검증을 처리하고 모델을 호출할 수 있습니다. 추가적인 암호화/복호화 없이 직접 암호화된 속성 단계입니다.

       DoctorController

DoctorController는 유효성을 검사하여 등록을 처리합니다. 데이터를 입력하고 모델을 통해 암호화하여 데이터베이스에 저장합니다. 의사 데이터를 가져올 때 자동으로 암호를 해독합니다. 민감한 필드입니다.

<?phpnamespace  AppHttpControllers;use IlluminateHttpRequest;use AppModelsDoctor;use IlluminateSupportFacadesHash;class DoctorController extends Controller{
    public function register(Request $request)
    {
        // Validate the incoming request
        $validatedData = $request->validate([
            'first_name' => 'required|string|max:255',
            'last_name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:doctors,email',
            'mobile' => 'required|string|size:10|unique:doctors,mobile',
            'password' => 'required|string|min:8|confirmed',
        ]);

        // Hash the email to ensure uniqueness
        $hashedEmail = hash('sha256', $validatedData['email']);

        // Create a new doctor record (model will handle encryption)
        $doctor = Doctor::create([
            'first_name' => $validatedData['first_name'],
            'last_name' => $validatedData['last_name'],
            'email' => $validatedData['email'],
            'hashed_email' => $hashedEmail,
            'mobile' => $validatedData['mobile'],
            'password' => Hash::make($validatedData['password']),
        ]);

        return response()->json([
            'message' => 'Doctor registered successfully',
            'doctor' => $doctor
        ], 201);
    }

    public function show($id)
    {
        // Fetch the doctor record (model will decrypt the data automatically)
        $doctor = Doctor::findOrFail($id);

        return response()->json($doctor);
    }}
로그인 후 복사

   설명

  • 등록 방법: 들어오는 요청을 검증하고, 새로운 의사 기록을 생성하며, 모델의 암호화 방법에 따라 이름, 성, 이메일, 휴대폰과 같은 필드를 자동으로 암호화합니다.
  • show 메소드: ID별로 의사 기록을 검색합니다. 그만큼 모델의 getter 메소드는 민감한 필드를 자동으로 해독합니다. 데이터를 반환합니다.

   3단계: 데이터베이스 구성

민감한 데이터에 대한 doctor 테이블 열의 길이가 암호화된 데이터(일반적으로 TEXT 또는 LONGTEXT)를 처리하기에 충분한 길이인지 확인하세요.

예제 마이그레이션 설정:

Schema::create('doctors', function (Blueprint $table) {
    $table->id();
    $table->text('first_name');
    $table->text('last_name');
    $table->text('email');
    $table->string('hashed_email')->unique(); // SHA-256 hashed email
    $table->text('mobile');
    $table->string('password');
    $table->timestamps();});
로그인 후 복사

참고: 암호화된 값은 일반 텍스트보다 훨씬 길 수 있으므로 값이 암호화된 필드에는 TEXT가 선호됩니다.

   4단계: 암호 해독 예외 처리

오류 처리 강화를 위해 모델 getter의 try-catch 블록에 암호 해독 논리를 래핑합니다.

<?phpnamespace  AppModels;use IlluminateDatabaseEloquentModel;use IlluminateSupportFacadesCrypt;class Doctor extends Model{
    protected $fillable = [
        &#39;first_name&#39;, &#39;last_name&#39;, &#39;email&#39;, &#39;mobile&#39;, &#39;hashed_email&#39;, &#39;password&#39;
    ];

    // Automatically encrypt attributes when setting them
    public function setFirstNameAttribute($value)
    {
        $this->attributes['first_name'] = encrypt($value);
    }

    public function setLastNameAttribute($value)
    {
        $this->attributes['last_name'] = encrypt($value);
    }

    public function setEmailAttribute($value)
    {
        $this->attributes['email'] = encrypt($value);
    }

    public function setMobileAttribute($value)
    {
        $this->attributes['mobile'] = encrypt($value);
    }

    // Automatically decrypt attributes when getting them
    public function getFirstNameAttribute($value)
    {
        return decrypt($value);
    }

    public function getLastNameAttribute($value)
    {
        return decrypt($value);
    }

    public function getEmailAttribute($value)
    {
        return decrypt($value);
    }

    public function getMobileAttribute($value)
    {
        return decrypt($value);
    }}
로그인 후 복사
로그인 후 복사

   추가 참고 사항

  • 환경 보안: APP_KEY가 .env 파일에 안전하게 저장되어 있는지 확인하세요. 이 키는 암호화/복호화에 중요합니다.
  • 데이터 백업: 데이터 무결성이 중요한 경우 올바른 APP_KEY 없이 암호화된 데이터를 복구할 수 없으므로 백업 메커니즘이 있는지 확인하십시오.

   요약

  1. 모델 암호화: 데이터를 저장하기 전에 setter 메소드를 사용하여 암호화하고, 검색 시 데이터를 해독하려면 getter 메소드를 사용합니다.
  2. 컨트롤러 로직: 컨트롤러는 추가 암호화 코드 없이 암호화된 필드를 직접 처리할 수 있습니다. .
  3. 데이터베이스 구성: 암호화하려면 TEXT 또는 LONGTEXT 열을 사용하세요. 필드.
  4. 보안 고려 사항: APP_KEY를 보호하고 암호 해독 오류에 대해 getter에서 예외 처리를 사용합니다.

위 내용은 Laravel의 데이터 암호화 및 복호화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿