dolphiq / laravel-aescrypt
受elocryptfive启发的Eloquent属性AES加密和解密
Requires
- php: >=7.0
- illuminate/config: ^5.0
- illuminate/console: ^5.0
- illuminate/container: ^5.0
- illuminate/contracts: ^5.0
- illuminate/encryption: ^5.0
- illuminate/support: ^5.0
- paragonie/random_compat: ^1.1|^2.0
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2024-09-15 04:57:40 UTC
README
首先阅读
此包使用128位密钥长度的Openssl AES ECB加密方法。默认与AES_ENCRYPT函数兼容,可以通过运行查询来重现结果
set @salt = SUBSTRING(SHA2('My secret pass phrase',256), 1, 16);
SELECT @salt as salt, AES_ENCRYPT('text to encrypt', @salt);
如果启用AESCRYPT_BASE64_OUTPUT设置,则查询将变为
set @salt = SUBSTRING(SHA2('My secret pass phrase',256), 1, 16);
SELECT @salt as salt, TO_BASE64(AES_ENCRYPT('text to encrypt', @salt));
默认情况下,包使用空白IV(就像MySQL一样)。在这些条件下,相同输入文本的结果哈希相同。这比使用随机IV要安全一些,但不太推荐用于重复多次或高度安全的数据,但它有一个大优势:可以在不解密所有记录的情况下快速搜索数据库中匹配的文本(例如电子邮件地址)。
注意:加密值通常比明文值长。有时要长得多。您可能会发现需要扩展数据库表中列的宽度以存储加密值。默认情况下,此包以原始哈希形式存储数据,可以通过在.env文件中将AESCRYPT_BASE64_OUTPUT = true
切换来更改
如果您正在使用默认加密方法,应将数据库列更改为VARBINARY(300的长度对于以前的256个varchar来说是安全的),如果您启用AES_BASE64_OUTPUT,则可以使用VARCHAR(长度:原始文本 + 13 + 16)* 1.3或TEXT或LONGTEXT。
这有什么作用?
此功能通过在Laravel应用程序中加密存储在数据库表中的列来实现透明加密和解密,通过在模型属性中加密数据以及在从模型属性检索数据时解密数据。
所有加密的数据都带有标签(默认为__AESCRYPT__:
),以便可以轻松识别加密数据。
这支持存储加密或非加密数据的列,以简化迁移。可以正确地从列中读取数据,无论其是否加密,但将其保存回这些列时将自动加密。
要求和推荐
- Laravel 5.5 LTS(未测试其他版本)
- PHP > 7
- PHP openssl 扩展。
- 操作系统上工作正常的OpenSSL实现。OpenSSL与大多数Linux发行版以及其他形式的Unix(如*BSD)一起预构建。在Windows系统上可能没有工作正常的OpenSSL实现,这取决于您的LA?P堆栈如何构建。我无法为没有OpenSSL库的系统安装或使用ElocryptFive提供支持。
安装
可以通过运行以下命令使用Composer安装此包:
composer require dolphiq/laravel-aescrypt
在composer
完成后,将Laravel中的服务提供者添加到应用程序的config/app.php
文件中的providers
数组中
'providers' => [ ... Dolphiq\Aescrypt\AescryptServiceProvider::class, ],
在Lumen中,您可以将它添加到bootstrap/app.php
文件中
// Aescrypt provider $app->register(\Dolphiq\Aescrypt\AescryptServiceProvider::class);
配置
使用以下命令发布配置文件:
php artisan vendor:publish --provider='Dolphiq\Aescrypt\AescryptServiceProvider'
然后您需要在.env配置文件中添加一个加密密钥
AESCRYPT_AESKEY=xxxx
使用方法
只需在任何希望应用加密的Eloquent模型中引用Aescrypt trait,并定义一个包含要加密的属性列表的$encrypts
数组。
例如
use Dolphiq\Aescrypt\Aescrypt; class User extends Eloquent { use Aescrypt; /** * The attributes that should be encrypted on save. * * @var array */ protected $encrypts = [ 'username', 'email' ]; }
贡献者
本基于Darren Taylor原始的Laravel 4 "elocrypt"包,并加入了Delatbabel的修改。
我们团队的开发者:Johan Zandstra - info@dolphiq.nl 由 Dolphiq 提供