iserranodev/encrypt-bundle 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

iserranodev/encrypt-bundle

最新稳定版本:1.3.1

Composer 安装命令:

composer require iserranodev/encrypt-bundle

包简介

A Symfony bundle for encrypting entity properties in Database

README 文档

README

en es

Este bundle proporciona funcionalidad de encriptación para entidades de Doctrine en aplicaciones Symfony.

Instalación

  1. Instala el bundle usando Composer:
composer require iserranodev/encrypt-bundle
  1. Habilita el bundle en config/bundles.php:
return [
    // ...
    ISerranoDev\EncryptBundle\ISerranoDevEncryptBundle::class => ['all' => true],
];

Configuración

Variables de Entorno

El bundle utiliza las siguientes variables que puedes configurar en tu archivo .env:

# Valores por defecto proporcionados
ISD_ENCRYPT_HASH_KEY=UsLN^Dc6x9xP7n924NJoffw4$6p*9SNg#r0Qql#^bNusXh4dKU
ISD_ENCRYPT_METHOD=AES-128-CBC
ISD_ENCRYPT_IV=5414358938341622

Configuración del Bundle

Puedes personalizar la configuración en config/packages/i_serrano_dev_encrypt.yaml:

i_serrano_dev_encrypt:
    encryption_key_path: '%kernel.project_dir%/encryption/encryption.key'  # Ruta por defecto
    hash_key: 'TuNuevaClaveHash'    # Opcional: sobreescribe ISD_ENCRYPT_HASH_KEY
    method: 'TuNuevoMetodo'         # Opcional: sobreescribe ISD_ENCRYPT_METHOD
    iv: 'TuNuevoIV'                 # Opcional: sobreescribe ISD_ENCRYPT_IV

Uso

  1. Genera la clave de encriptación (esto creará el archivo en la ruta configurada):
php bin/console iserranodev:encrypt-bundle:generate-key
  1. Usa el atributo #[Encrypted] en las propiedades que desees encriptar:
use ISerranoDev\EncryptBundle\Attribute\Encrypted;
use App\EventListener\EncryptListener;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity()]
#[ORM\Table(name: 'users')]
#[ORM\EntityListeners([EncryptListener::class])]
class User
{
    #[ORM\Column(type: 'string', length: 255)]
    #[Encrypted]
    private ?string $sensitiveData = null;
}
  1. Usa el atributo #[Hashed] en las propiedades que desees hashear y poder buscar en base de datos:
use ISerranoDev\EncryptBundle\Attribute\Hashed;
use App\EventListener\HashListener;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity()]
#[ORM\Table(name: 'users')]
#[ORM\EntityListeners([HashListener::class])]
class User
{
    #[ORM\Column(type: 'string', length: 255)]
    #[Hashed]
    private ?string $sensitiveData = null;
}
  1. El bundle automáticamente:
    • Encriptará o aplicará un hash los datos antes de guardarlos en la base de datos
    • Desencriptará los datos cuando los recuperes
    • Manejará las migraciones de Doctrine correctamente

Uso de EncryptService

Puedes usar dicho servicio para encriptar o hashear diferentes textos. El atributo Encrypted usa los métodos hashData y unHashData para poder buscar en base de datos, pero si fuese necesario, también existe el método encryptData y decryptData, el cual no es recomendable para el uso de campos que se pretenden buscar.

En caso de usar los métodos de encrypt, consultar la librería https://github.com/paragonie/halite, ya que el cifrado de los datos con estos métodos están desarrollados mediante dicha librería.

Ubicación de la Clave de Encriptación

Por defecto, el archivo de clave se guarda en:

tu-proyecto/
├── encryption/
│   └── encryption.key

Puedes cambiar esta ubicación en la configuración del bundle.

Seguridad

  • No subas el archivo de clave (encryption.key) a tu repositorio
  • Asegúrate de incluir encryption/ en tu .gitignore
  • Mantén una copia segura de tu clave de encriptación
  • Considera usar variables de entorno en producción

Soporte para Migraciones

El bundle incluye soporte para migraciones de Doctrine. Para usarlo en tus migraciones:

use ISerranoDev\EncryptBundle\Interface\EncryptAwareMigrationInterface;

final class Version20240214123456 extends AbstractMigration implements EncryptAwareMigrationInterface
{
    private EncryptService $encryptService;

    public function setEncryptService(EncryptService $encryptService): void
    {
        $this->encryptService = $encryptService;
    }

    public function up(Schema $schema): void
    {
        // Usa $this->encryptService para encriptar/desencriptar datos
    }
}

统计信息

  • 总下载量: 67
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-02-14