attakinsky / encryptable
这是一个简单的特性,允许您在Eloquent模型中即时加密和解密多个字段。
1.0.0
2019-06-05 18:10 UTC
Requires
- illuminate/encryption: ~5.5
This package is auto-updated.
Last update: 2024-09-06 08:13:33 UTC
README
这是一个简单的特性,允许您在Eloquent模型中即时加密和解密多个字段。
这是为了解决其他人无法解决的问题:通过API解密答案,特别是在Lumen中。这不仅仅是一个Eloquent的加密包。
在Laravel/Lumen 5.5+上安装
composer require attakinsky/encryptable
用法
- 在任意模型中使用
use Attakinsky\Encryptable\Encryptable
- 包含特性
use Encryptable;
- 定义一个名为
$encryptable
的数组,其中包含必须加密/解密的字段。
示例
<?php
namespace App;
use Attakinsky\Encryptable\Encryptable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements MustVerifyEmail
{
use Notifiable, Encryptable;
/**
* The attributes that should be encrypted on database.
*
* @var array
*/
protected $encryptable = [
'name', 'email',
];
太棒了!
现在,您的数据将在保存时加密,在加载时解密。
演示
让我们开始一个Artisan tinker会话
php artisan tinker
Psy Shell v0.9.9 (PHP 7.3.5-1+ubuntu16.04.1+deb.sury.org+1 — cli) by Justin Hileman
加密修饰符
创建一个用户
>>> $x = new User();
[!] Aliasing 'User' to 'App\User' for this Tinker session.
=> App\User {#3195}
>>> $x->name = "John Doe";
=> "John Doe"
>>> $x->email = "johndoe_encrypted@gmail.com";
=> "johndoe_encrypted@gmail.com"
>>> $x->password = Hash::make('123456');
=> "$2y$10$CM2qTNmUhbmmLFqiwWfvbuzTQO9sz4hmDo4COWK2HEQdWMhkLp7YO"
>>> $x->save();
=> true
解密访问器
名称和电子邮件字段已加密。您可以使用任何工具如控制台、PHPMyAdmin、Adminer等进行验证。
>>> $x = User::all();
=> Illuminate\Database\Eloquent\Collection {#3196
all: [
App\User {#3197
id: 1,
name: "eyJpdiI6InlvRWxQZ2ZcL1VBM0lqNW5pVkZxZ2d3PT0iLCJ2YWx1ZSI6ImtjUDNGRmVLNTF1clM0NllUb2FWWFI1WlMrandIaTVcL2lZTXkzSmVoWU5ZPSIsIm1hYyI6ImJmMjg3MzM3ZDE5OWJlMTkwNjg3MjBmNWQ0ZTcxYmY3MWY1ZjY0NmI4ZjhjMzg1NzAyZjY0NDE2MjE1NDNjNDIifQ==",
email: "eyJpdiI6IklDRjJIUlBqaHp4dkJ3Z3ZTcWdmdVE9PSIsInZhbHVlIjoiaW5GUXVGcjJudE1GczRBYnFhN1V2RTRZUlRtT1czUFNWUDVnQ21qSEx1Zz0iLCJtYWMiOiIzZThmY2IyNzM3MTcxMjUwNmVmODQ1NDliNzNjN2MxZjFkMWY0MDA1MDZjZTAzNjI3YmRkZTcxM2FjNjA5ZWMwIn0=",
email_verified_at: null,
created_at: "2019-06-04 21:28:39",
updated_at: "2019-06-04 21:28:39",
},
],
}
>>>
>>> $x = User::find(1);
=> App\User {#3198
id: 1,
name: "eyJpdiI6InlvRWxQZ2ZcL1VBM0lqNW5pVkZxZ2d3PT0iLCJ2YWx1ZSI6ImtjUDNGRmVLNTF1clM0NllUb2FWWFI1WlMrandIaTVcL2lZTXkzSmVoWU5ZPSIsIm1hYyI6ImJmMjg3MzM3ZDE5OWJlMTkwNjg3MjBmNWQ0ZTcxYmY3MWY1ZjY0NmI4ZjhjMzg1NzAyZjY0NDE2MjE1NDNjNDIifQ==",
email: "eyJpdiI6IklDRjJIUlBqaHp4dkJ3Z3ZTcWdmdVE9PSIsInZhbHVlIjoiaW5GUXVGcjJudE1GczRBYnFhN1V2RTRZUlRtT1czUFNWUDVnQ21qSEx1Zz0iLCJtYWMiOiIzZThmY2IyNzM3MTcxMjUwNmVmODQ1NDliNzNjN2MxZjFkMWY0MDA1MDZjZTAzNjI3YmRkZTcxM2FjNjA5ZWMwIn0=",
email_verified_at: null,
created_at: "2019-06-04 21:28:39",
updated_at: "2019-06-04 21:28:39",
}
在此阶段,当您需要时,Attakinsky/Encryptable访问器的权限将允许解密。例如在blade中:{{ $user->name }}
将打印 John Doe
。
Lumen和API支持。
但是,如果您需要带有原始数据的响应,则标准访问器不会对其进行解密。Attakinsky/Encryptable包括一个额外的批量访问器,允许解密将不会调用但以JSON格式发送作为响应的数据。
>>> $x->toArray();
=> [
"id" => 1,
"name" => "John Doe",
"email" => "johndoe_encrypted@gmail.com",
"email_verified_at" => null,
"created_at" => "2019-06-04 21:28:39",
"updated_at" => "2019-06-04 21:28:39",
]
>>>
>>> $x->toJson();
=> "{"id":1,"name":"John Doe","email":"johndoe_encrypted@gmail.com","email_verified_at":null,"created_at":"2019-06-04 21:28:39","updated_at":"2019-06-04 21:28:39"}"
⚠ 注意!
加密100%依赖于您.env文件中的 APP_KEY
。因此,您的 APP_KEY
不应该更改。如果发生这种情况,您的信息将无法解密。
请始终记住,加密数据的关键是唯一可以解密它的关键。