joelwmale / laravel-encryption
A package to easily encrypt & decrypt model fields in Laravel using OpenSSL.
Installs: 1 025
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- php: ^8.1
- ext-json: *
- illuminate/support: ^8.0|^9.0|^10.0|^11.0
- nesbot/carbon: ^2.71
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.8
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.13
- pestphp/pest: ^2.24
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.2
README
A package to easily encrypt & decrypt model fields in Laravel using OpenSSL.
Key Features
- Encrypt and decrypt module attributes easily
- Minimal configuration
- Comes with a selection of eloquent builders for easy queries
- Growing support for casting encryptable data
Installation
You can install the package via composer:
composer require joelwmale/laravel-encryption
Usage
<?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' ]; }
Configuration
Publshing The Configuration
The configuration file looks like this:
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'), ];
If you need to make any changes to the configuration, feel free to publish the configuration file.
php artisan vendor:publish --provider="Joelwmale\LaravelEncryption\LaravelEncryptionServiceProvider"
Configure Model Attributes To Be Encrypted
This package will only encrypt fields within the $encryptableAttributes
array, leaving the rest of the model unencrypted and untouched.
protected $encryptableAttributes = [ 'first_name', 'last_name', ];
This is useful for scenarios where compliance only requires you encrypting specific values and not your entire database.
Casting Encrypted Values
Due to the fact that encrypted values can be quite long, you will need to store them as text
fields, meaning you have to give way to native column types.
Also due to the way Laravel handles casting (and the priority it takes) you cannot right now use native casts with encrypted fields.
So we use our own array to determine what fields should be casted to what:
protected $encryptableCasts = [ 'date_of_birth' => 'date', ];
Supported casts
Cast support is still growing, and will be added as time goes on.
- date
- datetime
- json
Testing
composer test
License
The MIT License (MIT). Please see License File for more information.