roelofr/laravel-encryption-cast

This package is abandoned and no longer maintained. No replacement package was suggested.

An Eloquent cast to encrypt and decrypt data, whilst still allowing your own casts

v1.2.0 2020-09-09 20:25 UTC

This package is auto-updated.

Last update: 2022-07-17 00:47:07 UTC


README

Build status Code Climate maintainability rating Code Climate coverage rating

PHP code style: PSR-12 License: MIT

A super-simple, fully tested database encryption system, which allows for extra conversions to take place afterwards.

End of Life

This package has reached it's end of life. Laravel now supports encryption out-of-the-box, so adding a separate package that does the same is useless.

License

The software is licensed under the MIT License.

Requirements

This project requires Laravel 7.x and PHP 7.4 or newer. You should also update your database schemas to allow for encrypted data. Encrypted data is base64-encoded, and might be significantly longer than the same data as, for example, JSON.

It's recommended to use long VARCHAR fields or even TEXT fields.

Installation

Just require it via composer, it doesn't register a service provider.

composer require roelofr/laravel-encryption-cast

Usage

This class contains a two-way cast that takes extra casts as first and only argument. null-values are not encrypted.

Encrypted strings

To encrypt the phone_number field, simply cast it.

protected $casts = [
    'phone_number' => \Roelofr\EncryptionCast\Casts\EncryptedAttribute::class
];

Encrypted basic types

Say we have a date_of_birth field, we can cast that as a date.

protected $casts = [
    'date_of_birth' => \Roelofr\EncryptionCast\Casts\EncryptedAttribute::class . ':date'
];

Encrypted collections

Now, say we have an address which is a collection, we can also cast it like that.

protected $casts = [
    'address' => \Roelofr\EncryptionCast\Casts\EncryptedAttribute::class . ':collection'
];

Encrypted complex models

Now, lastly, say you made a custom cast that casts the medication field to some other type, and named it App\Casts\MedicationCast, you can send that as a second argument.

protected $casts = [
    'medication' => \Roelofr\EncryptionCast\Casts\EncryptedAttribute::class . ':' . \App\Casts\MedicationCast::class
];

And that's about it.

Compatibility

To ease development you can use one of the casts in the Compat namespace. These are included:

Contributing

If you found any bugs or issues and can help, please open an issue. The code is linted for code style and coverage is exected to be >95% at all times.