joelwmale/laravel-encryption

一个用于使用 OpenSSL 在 Laravel 中轻松加密和解密模型字段的软件包。

2.1.1 2024-09-03 06:41 UTC

This package is auto-updated.

Last update: 2024-09-03 06:42:09 UTC


README

Latest Version on Packagist Total Downloads GitHub Actions

一个用于使用 OpenSSL 在 Laravel 中轻松加密和解密模型字段的软件包。

主要功能

  • 轻松加密和解密模块属性
  • 最小化配置
  • 提供了一系列的 Eloquent 构建器以方便查询
  • 支持更多可加密数据的类型转换

安装

您可以通过 composer 安装此软件包

composer require joelwmale/laravel-encryption

用法

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Joelwmale\LaravelEncryption\Traits\EncryptsAttributes;

class User extends Model
{
    use EncryptsAttributes;

    protected $encryptableAttributes = [
        'first_name',
        'last_name',
        'date_of_birth',
        'email_verified_at',
    ];

    protected $encryptableCasts = [
        'date_of_birth' => 'date',
        'email_verified_at' => 'datetime'
    ];
}

配置

发布配置文件

配置文件如下所示

return [
    /**
     * Enable or disable the encryption.
     */
    'enabled' => env('LARAVEL_ENCRYPTION_ENABLED', true),

    /**
     * The encryption key.
     *
     * Default: your app key.
     */
    'key' => env('LARAVEL_ENCRYPTION_KEY', null),

    /**
     * The encryption cipher.
     *
     * Supports any cipher method supported by openssl_get_cipher_methods().
     *
     * Default: AES-256-CBC.
     */
    'cipher' => env('LARAVEL_ENCRYPTION_CIPHER', 'AES-256-CBC'),
];

如果您需要更改配置,请随时发布配置文件。

php artisan vendor:publish --provider="Joelwmale\LaravelEncryption\LaravelEncryptionServiceProvider"

配置要加密的模型属性

此软件包将仅加密 $encryptableAttributes 数组中的字段,其余模型将保持未加密和未修改。

protected $encryptableAttributes = [
    'first_name',
    'last_name',
];

这在仅需要加密特定值而不加密整个数据库的场景中非常有用。

类型转换加密值

由于加密值可能相当长,您需要将它们存储为 text 字段,这意味着您必须允许原生列类型。

此外,由于 Laravel 处理类型转换的方式(以及其优先级),您目前无法对加密字段使用原生类型转换。

因此,我们使用自己的数组来确定哪些字段应该转换为哪种类型

protected $encryptableCasts = [
    'date_of_birth' => 'date',
];

支持的类型转换

类型转换支持仍在增长,并将随着时间的推移而添加。

  • date
  • datetime
  • json

测试

composer test

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件