Laravel 中的資料加密與解密
本指南介紹如何在 Laravel 模型中實現敏感資料的加密和解密。透過執行以下步驟,您可以在將資料儲存到資料庫之前保護資料並在檢索資料時對其進行解密。
先決條件
- Laravel:確保您使用的是 Laravel 專案。
- 加密金鑰:Laravel 在 .env 檔案中自動產生 APP_KEY。此金鑰由 Laravel 的加密服務使用。
第 1 步:在模型中設定加密
在模型中,我們將使用 Laravel 的 encrypt() 和 decrypt() 函數自動處理指定欄位的加密和解密。
Doctor模型
使用加密和解密方法建立或更新Doctor模型。我們將在將名字、姓氏、電子郵件和手機等欄位儲存到資料庫之前對其進行加密。
<?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); }}
說明
- Setter 方法:使用 set{AttributeName }Attribute() 在資料儲存到資料庫之前加密資料。
- 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); }}
說明
- register 方法:驗證傳入的請求,建立新的醫生記錄,並根據模型的加密方法自動加密名字、姓氏、電子郵件和手機等欄位。
- 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();});
注意:由於加密值可能比明文長得多值,因此加密欄位首選文字。
步驟 4:處理解密異常
為了增強錯誤處理,請將解密邏輯包裝在模型 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); }}
附加說明
- 環境安全:確保 APP_KEY 安全地儲存在 .env 檔案中。此密鑰對於加密/解密至關重要。
- 資料備份:如果資料完整性至關重要,請確保您有備份機制,因為沒有正確的 APP_KEY,加密資料將無法復原。
摘要
- 模型加密:儲存前使用setter方法加密數據,檢索時使用getter方法解密。
- 控制器邏輯:控制器可以直接處理加密字段,無需額外的加密代碼.
- 資料庫配置:使用 TEXT 或 LONGTEXT 欄位作為加密欄位。
- 安全注意事項:保護您的 APP_KEY 並在 getter 中使用異常處理來處理解密錯誤。
以上是Laravel 中的資料加密與解密的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

目錄如何選擇加密貨幣進行短期交易?短期交易最佳加密貨幣列表比特幣雪崩索拉納狗狗幣多邊形世界幣Chainlink新興企業如何選擇加密貨幣進行短期交易?短期交易是指購買加密貨幣並持有一段時間,從幾分鐘到幾天不等。這種方法前景光明,但也存在風險,耗時較長,因為你需要持續關注市場行情。但這還不是全部;在選擇合適的加密貨幣資產時,你還應該注意以下幾點:波動性:短期交易成功的主要指標之一是高揮發性加密貨幣的價值;價值越高,價格波動越大,從而創造更

介紹去中心化金融(DeFi)正在改變用戶與區塊鏈技術的交互方式,為交易、借貸和收益創造創造無縫靈活的途徑。 Solayer(LAYER)正是這一變革的核心,它構建了一個跨多條區塊鏈連接流動性和實用性的協議。隨著DeFi的普及以及對高效跨鏈基礎設施需求的增長,Solayer正吸引著交易員、開發者和投資者的關注,他們正在尋找下一個重大機遇。本文將解釋Solayer的概念,詳細介紹其創新功能和代幣經濟學,並展望其2030年

區塊鏈技術持續改變著人們在線上交換價值、驗證信息和建立信任的方式。隨著去中心化應用在各行各業的蓬勃發展,跨多個區塊鏈確認聲明和身份的能力變得越來越重要,也越來越複雜。傳統的、依賴於中心化權威的信任模型往往不足以支撐去中心化的生態系統,因此對區塊鏈原生驗證解決方案的需求也日益增長。 SignProtocol(SIGN)通過提供一個用於跨多個區塊鍊網絡創建、驗證和管理證明的框架來應對這一挑戰。 SignProtocol旨在打造一個全鏈

Solana鏈上兩大Meme幣——MooDeng(MOODENG)、GoatseusMaximus(GOAT)昨(11)日登陸幣安「Alpha」平台後迅速翻紅,重燃投資人熱情,其中MOODENG幣價單日狂飆逾123%,一舉刷新今年以來新高。幣安Alpha主要聚焦於早期潛力幣種,通常會上架社群熱度高、有成長潛力的幣種,如今正式上線MOODENG、GOAT,不僅為這兩款Meme幣注入資金活水,更讓Solana生態再

加密貨幣市場項目隨著區塊鏈發展而不斷湧現,目的就是改變傳統金融實踐,SwissCheese就是其中一個項目。據了解,SwissCheese是一個讓用戶能夠交易通證化股票的去中心化平台,旨在增強市場的可及性並降低交易成本,為更具包容性的金融環境鋪平道路。平台的原生代幣為SWCH,主要作用就是交易、治理等。該項目上線後立即引起了投資者的關注,但僅僅了解SWCH是什麼幣種?還不能分析出SWCH值得投資嗎?結合當前數據來看,SWCH具有一定的

目錄ALPACA幣最新新聞和價格動態AlpacaFinance(ALPACA)是什麼? AlpacaFinance是如何運作的? ALPACA幣是什麼? ALPACA代幣經濟學ALPACA價格走勢分析2025年ALPACA價格預測AlpacaFinance(ALPACA)未來展望ALPACA幣怎麼買?總結AlpacaFinance(ALPACA)是幣安智能鏈上的借貸協議,具有槓桿收益農業的特徵。自幣安宣布將於5月2日下架AL

TrendResearch自2025年4月24日研報全網發出至今,ETH自1800美元漲至2400美元附近,一個月內漲幅約30%,研報撰寫前的預判更是在1450美金開始,作為千億規模的資產標的,是大資金短期實現高回報的難得機會。彼時堅定看多的主要原因包括:ETH依然擁有穩健的金融數據,是加密重要基礎設施的地位沒有改變;短期高點巨大的調整幅度(4個月跌幅超60%);衍生品市場空頭規模龐大,底部現貨放量後攀升至重要支阻互換區域,傳統金融的

AltCoin季節指數在90天內衡量了對比特幣的頂級山寨幣的表現情況。 CryptoRover在X上分享了兩個不同的圖表,揭示了一些引人注目的趨勢轉變。第一個圖表是近期熱議的焦點-Altcoin季節。它展示了Altcoin季節指數,該指數衡量了90天內頂級山寨幣相對於比特幣的表現。這項具體數據來自blockchaincenter.net,測量了前50個表現最佳的山寨幣,不包括任何穩定幣或資產支持的代幣。關於AltCoin季節指數,如果在過去的90天內,前50個Altcoin的表現超過比特幣,則會進
