Simple bundle to add 2 new types to Doctrine
- encrypted
- encryptedArrayCollection
- hashed
It relies on libSodium for encryption
The Installation is quite simple:
- Require the Bundle via composer:
composer require gracious/doctrine-encryption-bundle
- Add the following to your doctrine.yaml:
types:
encrypted: 'Gracious\DoctrineEncryptionBundle\Type\Encrypted'
encryptedArrayCollection: 'Gracious\DoctrineEncryptionBundle\Type\EncryptedArrayCollection'
hashed: 'Gracious\DoctrineEncryptionBundle\Type\Hashed'
- Generate a 64 character encryption key, you could to this the following way:
sodium_bin2hex(random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES));
- Add the following two settings to your .env file:
ENABLE_ENCRYPTION=true
ENCRYPTION_KEY=[PASTE ENCRYPTION KEY HERE]
There are 2 settings at the moment, both are env vars
-
ENABLE_ENCRYPTION - true / false
-
ENCRYPTION_KEY - 64 character hexadecimal string
You can do 2 things to generate a key, either type one yourself or run:
sodium_bin2hex(random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES));
Nonces are automatically generated for each encrypted value and are added to the returned value as follows:
<nonce|encrypted value>
The following has to be added to you doctrine.yaml
types:
encrypted: 'Gracious\DoctrineEncryptionBundle\Type\Encrypted'
encryptedArrayCollection: 'Gracious\DoctrineEncryptionBundle\Type\EncryptedArrayCollection'
hashed: 'Gracious\DoctrineEncryptionBundle\Type\Hashed'
The block would look something like this:
doctrine:
dbal:
# configure these for your database server
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
# With Symfony 3.3, remove the `resolve:` prefix
url: '%env(resolve:DATABASE_URL)%'
types:
encrypted: 'Gracious\DoctrineEncryptionBundle\Type\Encrypted'
encryptedArrayCollection: 'Gracious\DoctrineEncryptionBundle\Type\EncryptedArrayCollection'
hashed: 'Gracious\DoctrineEncryptionBundle\Type\Hashed'
To use either of the 3 types in your entity just replace the column type with
@ORM\Column(type="encrypted")
or
@ORM\Column(type="encryptedArrayCollection")
or
@ORM\Column(type="hashed")