Penyulitan dan penyahsulitan data dalam Laravel
Dec 12, 2024 am 11:50 AMPanduan ini menerangkan cara melaksanakan penyulitan dan penyahsulitan data sensitif dalam model Laravel. Dengan melakukan langkah berikut, anda boleh melindungi data sebelum menyimpannya dalam pangkalan data dan menyahsulitnya apabila mendapatkan semula data.
Prasyarat
- Laravel: Pastikan anda menggunakan projek Laravel.
- Kunci penyulitan: Laravel menjana APP_KEY secara automatik dalam fail .env. Kunci ini digunakan oleh perkhidmatan penyulitan Laravel.
Langkah 1: Sediakan penyulitan dalam model
Dalam model, kami akan menggunakan fungsi encrypt() dan decrypt() Laravel untuk mengendalikan penyulitan dan penyahsulitan medan yang ditentukan secara automatik.
Model Doktor
Buat atau kemas kini model Doktor menggunakan kaedah penyulitan dan penyahsulitan. Kami akan menyulitkan medan seperti nama pertama, nama keluarga, e-mel dan telefon bimbit sebelum menyimpannya ke pangkalan data.
<?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); ????}}
Penerangan
- Kaedah penetap: Gunakan set{AttributeName }Attribute() untuk menyulitkan data sebelum menyimpannya dalam pangkalan data.
- Kaedah Getter: Gunakan get{AttributeName}Attribute() untuk menyahsulit apabila mendapatkan data daripada pangkalan data.
Langkah 2: Pengawal untuk penyimpanan dan pengambilan data
Dalam pengawal anda boleh mengendalikan pengesahan dan memanggil model Sulitkan atribut secara langsung tanpa penyulitan/penyahsulitan tambahan langkah.
DoctorController
DoctorController mengendalikan pendaftaran melalui pengesahan
Masukkan data, enkripsi melalui model dan simpan dalam pangkalan data.
Apabila data doktor diperoleh, ia akan dinyahsulit secara automatik
Medan sensitif.
<?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); ????}}
Penerangan
- kaedah daftar: Sahkan permintaan masuk, cipta rekod doktor baharu dan menyulitkan medan secara automatik seperti nama pertama, nama keluarga, e-mel dan telefon mudah alih berdasarkan kaedah penyulitan model.
- kaedah tunjukkan: Dapatkan rekod doktor melalui ID. ini Medan sensitif akan dinyahsulit secara automatik sebelum kaedah getter model Kembalikan data.
Langkah 3: Konfigurasi pangkalan data
Pastikan lajur jadual doktor untuk data sensitif cukup panjang untuk mengendalikan data yang disulitkan (biasanya TEXT atau LONGTEXT).
Contoh tetapan migrasi:
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();});
Nota: Memandangkan nilai yang disulitkan mungkin lebih panjang daripada teks biasa, teks diutamakan untuk medan yang disulitkan .
Langkah 4: Kendalikan pengecualian penyahsulitan
Untuk meningkatkan pengendalian ralat, bungkus logik penyahsulitan dalam blok cuba-tangkap dalam pengambil model:
<?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); ????}}
Nota Tambahan
- Keselamatan Alam Sekitar: Pastikan APP_KEY disimpan dengan selamat dalam fail .env. Kunci ini penting untuk penyulitan/penyahsulitan.
- Sandaran Data: Jika integriti data adalah kritikal, pastikan anda mempunyai mekanisme sandaran, kerana data yang disulitkan tidak akan dapat dipulihkan tanpa APP_KEY yang betul.
Ringkasan
- Penyulitan model: Gunakan kaedah penetap untuk menyulitkan data sebelum penyimpanan dan gunakan kaedah pengambil untuk menyahsulitnya semasa pengambilan semula.
- Logik pengawal: Pengawal boleh mengendalikan medan yang disulitkan secara langsung tanpa kod penyulitan tambahan
- Konfigurasi pangkalan data: Gunakan lajur TEXT atau LONGTEXT sebagai medan yang disulitkan.
- Nota Keselamatan: Lindungi APP_KEY anda dan gunakan pengendalian pengecualian dalam pengambil untuk mengendalikan ralat penyahsulitan.
Atas ialah kandungan terperinci Penyulitan dan penyahsulitan data dalam Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Ethereum adalah platform aplikasi yang terdesentralisasi berdasarkan kontrak pintar, dan ETH token asalnya boleh diperolehi dalam pelbagai cara. 1. Daftar akaun melalui platform berpusat seperti Binance dan Ouyiok, pensijilan KYC lengkap dan membeli ETH dengan stablecoins; 2. Sambungkan ke penyimpanan digital melalui platform yang terdesentralisasi, dan secara langsung bertukar ETH dengan stablecoins atau token lain; 3. Mengambil bahagian dalam ikrar rangkaian, dan anda boleh memilih Ikrar Bebas (memerlukan 32 ETH), perkhidmatan ikrar cecair atau ikrar satu klik pada platform terpusat untuk mendapatkan ganjaran; 4. Dapatkan ETH dengan menyediakan perkhidmatan kepada projek Web3, menyelesaikan tugas atau mendapatkan udara. Adalah disyorkan bahawa pemula bermula dari platform terpusat arus perdana, beransur -ansur beralih ke kaedah yang terdesentralisasi, dan selalu melampirkan kepentingan keselamatan aset dan penyelidikan bebas, ke

Penggunaan sebenar Battle Royale dalam sistem mata wang dua belum lagi berlaku. Kesimpulan Pada bulan Ogos 2023, Protokol Pinjaman Ekologi Makerdao memberi pulangan tahunan sebanyak $ DAI8%. Kemudian Sun Chi memasuki kelompok, melabur sejumlah 230,000 $ Steth, menyumbang lebih daripada 15% daripada deposit Spark, memaksa Makerdao membuat cadangan kecemasan untuk menurunkan kadar faedah kepada 5%. Hasrat asal Makerdao adalah untuk "mensubsidi" kadar penggunaan $ dai, hampir menjadi hasil solo Justin Sun. Julai 2025, Ethe

Apa itu Treehouse (pokok)? Bagaimanakah pokok pokok (pokok) berfungsi? Produk Treehouse Tethdor - Kadar Petikan Desentralisasi Gonuts Titik Sistem Treehouse menyoroti token pokok dan Token Ekonomi Gambaran Keseluruhan pada suku ketiga 2025 Team Pembangunan Roadmap, Pelabur dan Rakan Kongsi Treehouse Pengasas Pasukan Dana Pelaburan Ringkasan Apabila Defi terus berkembang, Permintaan untuk Produk Pendapatan Tetap Berkembang. Walau bagaimanapun, membina blok block

Jadual Kandungan Crypto Market Panoramik Nugget Token Vinevine Popular (114.79%, nilai pasaran bulat sebanyak AS $ 144 juta) Zorazora (16.46%, nilai pasaran pekeliling US $ 290 juta) Navxnaviprotocol (10.36%. dan cryptopunks menduduki tempat pertama dalam rangkaian prover yang terdesentralisasi dengan ringkas melancarkan asas ringkas, yang mungkin menjadi token tGe

Pertempuran lisan mengenai nilai "Token Pencipta" menyapu bulatan sosial crypto. Base dan dua rantaian awam utama Solana Helmsmans mempunyai konfrontasi yang jarang berlaku, dan perdebatan yang sengit di sekitar Zora dan pam.Fun dengan serta-merta menyalakan kegilaan perbincangan pada Cryptotwitter. Di manakah konfrontasi yang dipenuhi serbuk ini berasal? Mari kita cari. Kontroversi berlaku: Fius serangan Sterling Crispin terhadap Zora adalah penyelidik Delcomplex Sterling Crispin membombardir Zora di platform sosial. Zora adalah protokol sosial di rantaian asas, memberi tumpuan kepada laman utama dan kandungan pengguna

Buat jadual rujukan untuk merekodkan hubungan cadangan, termasuk rujukan, rujukan, kod cadangan dan masa penggunaan; 2. Tentukan hubungan dan hubungan hasmany dalam model pengguna untuk menguruskan data cadangan; 3. Menjana kod cadangan yang unik semasa mendaftar (boleh dilaksanakan melalui peristiwa model); 4. Menangkap kod cadangan dengan menanyakan parameter semasa pendaftaran, mewujudkan hubungan cadangan selepas pengesahan dan mencegah penyimpanan diri; 5. mencetuskan mekanisme ganjaran apabila pengguna yang disyorkan melengkapkan tingkah laku yang ditentukan (urutan langganan); 6. Menjana pautan cadangan yang boleh dikongsi, dan gunakan URL tandatangan Laravel untuk meningkatkan keselamatan; 7. Statistik cadangan paparan di papan pemuka, seperti jumlah cadangan dan nombor yang ditukar; Adalah perlu untuk memastikan kekangan pangkalan data, sesi atau kuki berterusan,

Direktori Apa itu Zirkuit Cara Mengendalikan Ciri -ciri Utama Zirkuit Senibina Hibrid Zirkuit AI Keselamatan Keserasian Keserasian Jambatan Zirkuit Poin Zirkuit Zirkuit Apa itu Zircuit Token (ZRC) Zircuit (ZRC) Prediction Harga Koin Cara Membeli Koin ZRC? Kesimpulan Dalam beberapa tahun kebelakangan ini, pasaran khusus platform Blockchain Layer2 yang menyediakan perkhidmatan kepada rangkaian Ethereum (ETH) Layer1 telah berkembang, terutamanya disebabkan oleh kesesakan rangkaian, yuran pengendalian yang tinggi dan skalabilitas yang lemah. Banyak platform ini menggunakan teknologi volume, pelbagai urus niaga yang diproses di luar rantai

Untuk mengelakkan mengambil alih pada harga spekulasi mata wang yang tinggi, adalah perlu untuk mewujudkan sistem pertahanan tiga dalam satu kesedaran pasaran, pengenalan risiko dan strategi pertahanan: 1. Mengenal pasti isyarat seperti lonjakan media sosial pada akhir pasaran lembu, terjun selepas lonjakan mata wang baru, dan pengurangan ikan paus gergasi. Pada peringkat awal pasaran beruang, gunakan peraturan piramid kedudukan dan kehilangan berhenti dinamik; 2. Membina penapis tiga untuk penggredan maklumat (strategi/taktik/bunyi), pengesahan teknikal (bergerak purata bergerak dan RSI, data mendalam), pengasingan emosi (tiga kerugian berturut -turut dan berhenti, dan menarik kabel rangkaian); 3. Buat pertahanan tiga lapisan peraturan (pengesanan ikan paus besar, kedudukan sensitif dasar), lapisan alat (pemantauan data rantaian, alat lindung nilai), dan lapisan sistem (Strategi Barbell, Rizab USDT); 4. Berhati -hati dengan kesan selebriti (seperti duit syiling Libra), perubahan dasar, krisis kecairan dan senario lain, dan lulus pengesahan kontrak dan pengesahan kedudukan dan
