<?php

function encryptData($data) {

    // Genera una clave de 256 bits a partir de APP_KEY (hash SHA-256)

    $key = hash('sha256', APP_KEY);

    // IV (Initialization Vector):
    // valor aleatorio necesario para el cifrado CBC
    // debe ser único por cada encriptación (16 bytes para AES)

    $iv = random_bytes(16);

    // Encripta los datos usando AES-256-CBC

    $encrypted = openssl_encrypt(
        $data,              // dato original
        'AES-256-CBC',      // algoritmo de cifrado
        $key,               // clave derivada
        0,                  // opciones (0 = salida base64 por defecto)
        $iv                 // vector de inicialización
    );

    // Se concatena IV + dato encriptado y se codifica en base64 para poder almacenarlo o transportarlo como string

    return base64_encode($iv . $encrypted);
}

function decryptData($data) {

    // Regenera la misma clave usada en el cifrado

    $key = hash('sha256', APP_KEY);

    // Decodifica el string base64

    $data = base64_decode($data);

    // Extrae el IV (primeros 16 bytes)

    $iv = substr($data, 0, 16);

    // Extrae el contenido cifrado

    $encrypted = substr($data, 16);

    // Desencripta el contenido usando los mismos parámetros

    return openssl_decrypt(
        $encrypted,
        'AES-256-CBC',
        $key,
        0,
        $iv
    );
}