Ce guide explique comment implémenter le cryptage et le déchiffrement des données sensibles dans les modèles Laravel. En effectuant les étapes suivantes, vous pouvez protéger les données avant de les stocker dans la base de données et les déchiffrer lors de la récupération des données.
Dans le modèle, nous utiliserons les fonctions encrypt() et decrypt() de Laravel pour gérer automatiquement le cryptage et le déchiffrement des champs spécifiés.
Créez ou mettez à jour un modèle Docteur à l'aide de méthodes de cryptage et de décryptage. Nous chiffrerons les champs tels que le prénom, le nom, l'e-mail et le téléphone portable avant de les enregistrer dans la base de données.
<?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); }}
Dans le contrôleur, vous pouvez gérer la validation et appeler le modèle Chiffrer directement les attributs sans cryptage/déchiffrement supplémentaire étape.
DoctorController gère l'inscription via la validation
Saisissez les données, cryptez-les via le modèle et enregistrez-les dans la base de données.
Lorsque les données du médecin sont obtenues, elles seront automatiquement décryptées
Domaines sensibles.
<?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); }}
Assurez-vous que les colonnes de la table Doctor pour les données sensibles sont suffisamment longues pour gérer les données cryptées (généralement TEXT ou LONGTEXT).
Exemple de paramètres de migration :
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();});
Remarque : étant donné que les valeurs chiffrées peuvent être beaucoup plus longues que le texte brut, le texte est préféré pour les champs chiffrés .
Pour améliorer la gestion des erreurs, enveloppez la logique de décryptage dans un bloc try-catch dans le getter de modèle :
<?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); }}
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!