hivelink / encrypt
使用 HivelinkTeam 通过 Eloquent 自动加密和解密数据库
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.4
This package is not auto-updated.
Last update: 2024-09-28 11:21:52 UTC
README
使用 openssl 加密和解密 Laravel 模型属性的包
主要功能
- 轻松加密和解密数据库字段
- 最小化配置
- 使用以下方式包含搜索加密数据:
whereEncrypted和orWhereEncrypted - 使用 openssl 加密和解密字段
- 自动使用模型加密或解密数据
要求
- Laravel: >= 5
- PHP: >= 7.3
- Max Laravel Support => 10
模式要求
加密值通常比纯文本值长,有时要长得多。您可能会发现数据库表中的列宽需要更改以存储此包生成的加密值。
我们强烈建议将列类型更改为 TEXT 或 LONGTEXT
安装
步骤 1: Composer
通过 Composer 命令行
$ composer require hivelink/encrypt
步骤 2: 将 ServiceProvider 添加到您的 app/config.php 文件(Laravel 5.4 或以下)
将服务提供程序添加到 config/app.php 配置文件中的 providers 数组中,如下所示
'providers' => [ ... \Hivelink\DBEncryption\Providers\DBEncryptionServiceProvider::class, ],
使用
在您希望应用加密的任何 Eloquent 模型中使用 EncryptedAttribute 特性,并定义一个包含要加密的属性列表的 protected $encrypted 数组。
例如
use Hivelink\DBEncryption\Traits\EncryptedAttribute;
class User extends Eloquent {
use EncryptedAttribute;
/**
* The attributes that should be encrypted on save.
*
* @var array
*/
protected $encryptable = [
'first_name', 'last_name'
];
}
通过包含 EncryptedAttribute 特性,Eloquent 提供的 setAttribute()、getAttribute() 和 getAttributeFromArray() 方法被覆盖以包括一个额外的步骤。
基于每个用户的加密和解密
步骤 1: Composer
在控制器中添加一行
use Hivelink\DBEncryption\Encrypter;
使用 encryptUser、decryptUser 方法,您可以基于用户 ID 加密和解密任何信息
例如
Route::get('/', function () {
$loadLib=new Encrypter();
$text="Hi my Dear?";
$userMail/$userPhone="test@hivelink.co";
$userRecord/OtherData=2342342;
$encData=$loadLib->encryptUser($text,$userMail,$userRecord);
$decData=$loadLib->decryptUser($encData,$userMail,$userRecord);
return $decData
});
使用此方法,您甚至可以加密具有相似性的用户信息的重复信息,并将其存储在数据库中。这种方法是为了增加您项目数据库中信息的安全性。
加密字段搜索示例
可以通过调用 whereEncrypted 和 orWhereEncrypted 函数来执行加密字段的搜索,类似于 Laravel Eloquent 的 where 和 orWhere。
namespace App\Http\Controllers; use App\User; class UsersController extends Controller { public function index(Request $request) { $user = User::whereEncrypted('first_name','john') ->orWhereEncrypted('last_name','!=','Doe')->firstOrFail(); return $user; } }
加密当前数据
如果您数据库中当前有数据,可以使用以下命令加密:php artisan encryptable:encryptModel 'App\User'
此外,您还可以使用以下命令解密:php artisan encryptable:decryptModel 'App\User'
注意:您必须首先实现 Encryptable 特性并设置 $encryptable 属性
存在和唯一验证规则
如果您使用存在和唯一规则与加密值,将其替换为 exists_encrypted 和 unique_encrypted php $validator = validator(['email'=>'foo@bar.com'], ['email'=>'exists_encrypted:users,email']); $validator = validator(['email'=>'foo@bar.com'], ['email'=>'unique_encrypted:users,email']);
常见问题解答
我能否搜索加密数据?
YES! 您将能够搜索由本包加密的属性,因为。如果您需要搜索数据,请使用 whereEncrypted 和 orWhereEncrypted 函数
User::whereEncrypted('email','hive@hivelink.co')->orWhereEncrypted('email','link@hivelink.co')->firstOrFail();
一旦模型使用 EncryptedAttribute,它将自动添加到 Eloquent 中
我能否加密所有 User 模型的数据?
除了 ID 之外,您可以加密您想要的一切
例如:在加密的电子邮件上登录
$user = User::whereEncrypted('email','hive@hivelink.co')->filter(function ($item) use ($request) {
return Hash::check($password, $item->password);
})->where('active',1)->first();
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅许可证文件。