dolphiq/laravel-aescrypt

受elocryptfive启发的Eloquent属性AES加密和解密

1.0.1 2017-10-25 09:00 UTC

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.nlDolphiq 提供