이 가이드에서는 암호화 및 복호화 구현 방법을 설명합니다. Laravel 모델의 민감한 데이터. 다음 단계를 수행하면 다음을 수행할 수 있습니다. 데이터를 데이터베이스에 저장하기 전에 보안을 유지하고 저장 시 암호를 해독합니다. 검색 중입니다.
모델에서는 Laravel의 encrypt() 및 decrypt() 함수를 사용하여 지정된 필드에 대한 암호화 및 복호화를 자동으로 처리합니다.
암호화 및 복호화 방법을 사용하여 Doctor 모델을 생성하거나 업데이트합니다. first_name, last_name, email, mobile 등의 필드를 데이터베이스에 저장하기 전에 암호화합니다.
<?phpnamespace AppModels;use IlluminateDatabaseEloquentModel;use IlluminateSupportFacadesCrypt;class Doctor extends Model{ protected $fillable = [ 'first_name', 'last_name', 'email', 'mobile', 'hashed_email', 'password' ]; // 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); }}
컨트롤러에서 검증을 처리하고 모델을 호출할 수 있습니다. 추가적인 암호화/복호화 없이 직접 암호화된 속성 단계입니다.
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); }}
민감한 데이터에 대한 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가 선호됩니다.
오류 처리 강화를 위해 모델 getter의 try-catch 블록에 암호 해독 논리를 래핑합니다.
<?phpnamespace AppModels;use IlluminateDatabaseEloquentModel;use IlluminateSupportFacadesCrypt;class Doctor extends Model{ protected $fillable = [ 'first_name', 'last_name', 'email', 'mobile', 'hashed_email', 'password' ]; // 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); }}
위 내용은 Laravel의 데이터 암호화 및 복호화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!