rbennett/laravel-model-encryption

本包最新版本(1.0.4)没有提供许可证信息。

一个无需烦恼的Laravel模型特性,用于添加加密模型属性,可选盲索引和哈希属性。

1.0.4 2020-03-31 09:17 UTC

This package is auto-updated.

Last update: 2024-09-29 04:31:31 UTC


README

No Maintenance Intended

Laravel模型加密、哈希和盲索引

一个无需烦恼的Laravel模型特性,用于添加加密模型属性,可选盲索引和哈希属性。

被标记为加密的模型属性将通过Laravel默认加密进行加密。只需将模型属性设置为字符串、整数、浮点数、布尔值或日期(作为字符串),其值将作为加密值持久化。访问属性时,将解密属性并将其转换为定义的类型(如果是日期,则为Carbon实例)。

您还可以指定一个与加密属性关联的盲索引(BI)属性。盲索引属性持久化相关明文加密属性列的哈希值。BI属性可用于在加密的搜索值数据库中进行搜索。已添加一个名为'whereBI'的局部作用域,允许使用加密属性名称和明文值指定'where'子句。

最后,您可以指定哈希属性。这些属性在持久化之前被哈希化,在检索时不能转换为明文。

注意 - 添加盲索引将降低加密列的安全性,因为关联的BI是确定的,将识别加密数据中的冲突。这是有意为之,没有它,加密数据将不可搜索。

注意 - 您可以通过在模型上设置$hashAlg属性来更改哈希算法,默认设置为'sha256'。如果您提高算法的安全性,则可能需要增加BI列的列宽。我发现长度为64的sha256效果很好。

注意 - 此特性不会为您创建DB列。您必须创建自己的迁移。请参阅Fixtures/Migrations/2018_04_18_134800_create_test_table.php以了解适合Fixtures/Models/TestModel.php中定义的属性的列定义。

要求

此包需要Laravel 5.6。Laravel的早期版本具有不同的模型实现,与该包不兼容。

安装

composer require rbennett/laravel-model-encryption

如何使用

##将特性添加到模型中

use RBennett\ModelEncryption\HasEncryptedAttributes;
use Illuminate\Database\Eloquent\Model;

class TestModel extends Model
{
    use HasEncryptedAttributes;

添加加密数据库列

对于任何需要加密/解密的DB列,请将其添加到模型的$encrypted属性中。这应该设置为形式为的数组

['实际列名' => ['type' => 'string|integer|float|boolean|date', {'hasBlindIndex' => 'blind_index_column_name'}]]

注意 - hasBlindIndex是可选的 注意 - 如果添加日期,则指定'dateformat'

请见下面的示例

protected $encrypted = [
        'encrypt_string' =>
            ['type' => 'string', 'hasBlindIndex' => 'encrypt_string_bi'],
        'encrypt_integer' =>
            ['type' => 'integer', 'hasBlindIndex' => 'encrypt_integer_bi'],
        'encrypt_boolean' =>
            ['type' => 'boolean', 'hasBlindIndex' => 'encrypt_boolean_bi'],
        'encrypt_another_boolean' =>
            ['type' => 'boolean'],
        'encrypt_float' =>
            ['type' => 'float', 'hasBlindIndex' => 'encrypt_float_bi'],
        'encrypt_date' =>
            ['type' => 'date', 'hasBlindIndex' => 'encrypt_date_bi', 'dateFormat' => 'Y-m-d H:i:s']
    ];

添加哈希数据库列

对于任何要哈希的DB列,只需将其添加到模型的$hashed属性中

protected $hashed = ['column_name1', 'column_name2];

局部作用域辅助工具

已添加一个局部作用域,允许您查询BI列(whereBI和或orWhereBI)。当使用whereBI或orWhereBI时,请传入一个数组,其中键是加密列名称(它将为您解析相关的BI列)和您想要搜索的值。值应以以下类型之一作为纯文本传入

字符串、整数、浮点数、布尔值或日期(作为字符串)

在查询日期时,确保日期格式与$encrypted属性中设置的日期格式相同。