Download the PHP package psolutions/encrypt-bundle without Composer

On this page you can find all versions of the php package psolutions/encrypt-bundle. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package encrypt-bundle

PSolutions Encrypt Bundle

A bundle to handle encoding and decoding of parameters using OpenSSL and Doctrine lifecycle events. It's a fork of https://github.com/mogilvie/EncryptBundle

Features include:

⚠️ IMPORTANT: Migration from Pre-v2.1 Versions

This bundle now uses AES-256-GCM instead of the old AES-256-CBC method.

If you are currently using a previous version of this bundle and have data already encrypted in your database:

MIGRATION STEPS REQUIRED

  1. Export your existing encrypted data using the OLD version (v2.0.x):

  2. Update the bundle to v2.1+:

  3. Re-encrypt all data with the new GCM method:

WARNING: If you skip the migration step, the new version will NOT be able to decrypt data encrypted with the old CBC method. The two formats are incompatible.

About AES-256-GCM

Features road map:

License

This bundle is under the MIT license. See the complete license in the bundle:

Resources/meta/LICENSE

About

EncryptBundle has been written for the Parolla Plugins and Parolla websites to encode users private data. The bundle is expanded in a larger gdpr-bundle.

Reporting an issue or a feature request

Issues and feature requests are tracked in the Github issue tracker.

When reporting a bug, it may be a good idea to reproduce it in a basic project built using the Symfony Standard Edition to allow developers of the bundle to reproduce the issue by simply cloning it and following some steps.

Installation

Step 1: Install from package

Open a command console, enter your project directory and execute the following command to download the latest development version of this bundle:

Step 2: Enable the bundle

The receipe will create a package config file under config/packages/psolutions_encrypt.yaml.

If required, enable the bundle by adding it to the list of registered bundles in the config/bundles.php file of your project:

Step 2: Configure the bundle

Generate a 256-bit encryption key using the command provided:

Copy the key into your .env file:

Maker will have created a packages yaml file. The key is resolved in there.

The bundle uses AES-256-GCM authenticated encryption by default. You can override the encryptor class if you need a different cipher method, but it's strongly recommended to keep GCM for security.

You can disable encryption by setting the 'is_disabled' option to true. Decryption still continues if any values contain the \ suffix.

If you want to define your own attribute, then this can be used to trigger encryption by adding the attribute to properties class that you want yo be encrypted.

You can pass the class name of your own encyptor service using the optional encryptorClass option.

Alternative EncryptKeyEvent

The EncryptKey can be set via a dispatched event listener, which overrides any .env or param.yml defined key. Create a listener for the EncryptKeyEvents::LOAD_KEY event and set your encryption key at that point.

Step 3: Create the entities

Add the Encrypted attribute class within the entity.

Add the attribute #[Encrypted] to the properties you want encrypted.

Where encrypting a field you will need to set the column type as string.

Your getters and setters may also need to be type declared.

For example, boolean should either be return declared bool, or return a bool using a ternary method.

For DateTime parameters store the date as a string, and use the getters and setters to convert that string.

You may also need to create a DataTransformer if you are using the parameter in a form with the DateType form type.

Step 4: General Use

The bundle comes with an DoctrineEncryptListener. This listener catches the doctrine events onLoad, onFlush and postFlush.

The onLoad event listener will decrypt your entity parameter at loading. This means that your forms and form fields will already be decrypted.

The onFlush and postFlush event listeners will check if encryption is enabled, and encrypt the data before entry to the database.

So, in normal CRUD operation you do not need to do anything in the controller for encrypting or decrypting the data.

Step 5: Decrypt in services and controllers

You can of course inject the EncryptorInterface service any time into classes either by using autowiring or defining the injection in your service definitions.

Or you can dispatch the EncryptEvent.

Step 5: Decrypt in templates

If you query a repository using a select with an array result then the doctrine onLoad event subscriber will not decrypt any encrypted values.

In this case, use the twig filter to decrypt your value when rendering.

Security Features

Authenticated Encryption (AES-256-GCM)

This bundle uses AES-256-GCM (Galois/Counter Mode), which provides:

Key Requirements

Data Format

Encrypted values in the database have the following structure:

All components are necessary; removing or altering any part will cause decryption to fail.

Commands

You have already seen the command to generate a encryption key:

You can decrypt/encrypt the entire database using the following

The requried argument should be be decrypt or encrypt.

There is an option to define the database connection if you employ multiple connections in your application.

Migration from Previous Versions

From v2.0.x or earlier (CBC mode) to v2.1+ (GCM mode)

This is a mandatory migration if you have existing encrypted data.

The encryption format changed from CBC to GCM, making them incompatible. Follow these steps exactly:

Step 1: Decrypt all existing data

Using your current codebase (before updating the bundle), run:

This will convert all encrypted fields to plain text in the database.

⚠️ Verify that the data is now unencrypted (check your database directly).

Step 2: Update the bundle

Or update your composer.json and run composer install.

Step 3: Re-encrypt with the new GCM method

With the updated bundle installed, run:

This will re-encrypt all plaintext fields using the new AES-256-GCM algorithm.

Step 4: Verify the migration

Check a few records in your database. Encrypted values should now:

Also test your application workflows to ensure encryption/decryption works correctly.

Rollback Procedure

If something goes wrong after migration:

  1. Keep a backup of the database before starting migration
  2. If you need to roll back to the old version, you must first run encrypt:database decrypt with the new version, then reinstall the old version and run encrypt:database encrypt with it

⚠️ Never skip the decryption step before updating, or you will permanently lose access to data encrypted with the old CBC format.

Custom Encryptors

You can create your own encryptor by implementing EncryptorInterface:

Then configure it:

⚠️ Security Warning: If you implement your own encryptor, you must ensure it provides proper authentication (like GCM's tag) to prevent tampering. Avoid CBC mode without HMAC.

Reference Implementation

See src/Encryptors/OpenSslEncryptor.php for the reference implementation using AES-256-GCM. It demonstrates:


For questions or issues, please open an issue on GitHub.


All versions of encrypt-bundle with dependencies

PHP Build Version
Package Version
Requires php Version >=8.2
doctrine/orm Version ^2.12|^3.5|^4.0
doctrine/doctrine-bundle Version ^2.6
ext-openssl Version *
twig/twig Version ^2.0|^3.0
symfony/framework-bundle Version ^6.4|^7.0|^8.0
symfony/console Version ^6.4|^7.0|^8.0
doctrine/common Version ^2.11|^3.0|^4.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package psolutions/encrypt-bundle contains the following files

Loading the files please wait ...