このガイドでは、Laravel モデルで機密データの暗号化と復号化を実装する方法について説明します。次の手順を実行すると、データベースに保存する前にデータを保護し、データを取得するときに復号化できます。
前提条件
- Laravel: Laravel プロジェクトを使用していることを確認してください。
- 暗号化キー: Laravel は .env ファイルに APP_KEY を自動的に生成します。このキーは、Laravel の暗号化サービスによって使用されます。
ステップ 1: モデルで暗号化を設定する
モデルでは、Laravel の encrypt() 関数と decrypt() 関数を使用して、指定されたフィールドの暗号化と復号化を自動的に処理します。
Doctor Model
暗号化および復号化メソッドを使用して 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); }}
説明
- 登録メソッド: 受信リクエストを確認し、新しい医師の記録を作成し、モデルの暗号化方法に基づいて名、姓、電子メール、携帯電話などのフィールドを自動的に暗号化します。
- show メソッド: ID によって医師の記録を取得します。これ 機密フィールドは、モデルのゲッター メソッドの前に自動的に復号化されます。 データを返します。
ステップ 3: データベース構成
機密データのドクター テーブル列が、暗号化されたデータ (通常は 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: 復号例外を処理する
エラー処理を強化するには、モデルゲッターの 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 を保護し、ゲッターで例外処理を使用して復号化エラーを処理します。
以上がLaravelでのデータの暗号化と復号化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于单点登录的相关问题,单点登录是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于Laravel的生命周期相关问题,Laravel 的生命周期从public\index.php开始,从public\index.php结束,希望对大家有帮助。

在laravel中,guard是一个用于用户认证的插件;guard的作用就是处理认证判断每一个请求,从数据库中读取数据和用户输入的对比,调用是否登录过或者允许通过的,并且Guard能非常灵活的构建一套自己的认证体系。

laravel中asset()方法的用法:1、用于引入静态文件,语法为“src="{{asset(‘需要引入的文件路径’)}}"”;2、用于给当前请求的scheme前端资源生成一个url,语法为“$url = asset('前端资源')”。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于使用中间件记录用户请求日志的相关问题,包括了创建中间件、注册中间件、记录用户访问等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于中间件的相关问题,包括了什么是中间件、自定义中间件等等,中间件为过滤进入应用的 HTTP 请求提供了一套便利的机制,下面一起来看一下,希望对大家有帮助。

在laravel中,fill方法是一个给Eloquent实例赋值属性的方法,该方法可以理解为用于过滤前端传输过来的与模型中对应的多余字段;当调用该方法时,会先去检测当前Model的状态,根据fillable数组的设置,Model会处于不同的状态。

laravel路由文件在“routes”目录里。Laravel中所有的路由文件定义在routes目录下,它里面的内容会自动被框架加载;该目录下默认有四个路由文件用于给不同的入口使用:web.php、api.php、console.php等。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ホットトピック









