Volver a la página principal
sábado 23 noviembre 2024
5

Cómo encriptar datos con sodium_crypto_secretbox en PHP

La función sodium_crypto_secretbox en PHP se utiliza para realizar cifrado simétrico de datos, proporcionando una forma segura de proteger información sensible. Este método emplea el algoritmo XSalsa20 para el cifrado y Poly1305 para la autenticación de mensajes, garantizando que los datos sean confidenciales e íntegros.

¿Cómo funciona sodium_crypto_secretbox?

sodium_crypto_secretbox cifra datos utilizando una clave secreta compartida entre el remitente y el destinatario, lo que lo hace ideal para escenarios donde ambas partes tienen una relación de confianza previa. Este método también requiere un nonce (número único por operación) para asegurar la unicidad del cifrado.

Sintaxis

sodium_crypto_secretbox(string $plaintext, string $nonce, string $key): string

Parámetros

Parámetro Tipo Descripción
$plaintext string El texto plano que se desea cifrar.
$nonce string Un valor único de 24 bytes que debe generarse aleatoriamente.
$key string Una clave secreta de 32 bytes generada previamente.

Retorno

La función devuelve una cadena cifrada que incluye el mensaje protegido y autenticado.

Ejemplo de uso

A continuación, se muestra cómo utilizar sodium_crypto_secretbox para cifrar datos:

<?php
// Texto a cifrar
$plaintext = "Información secreta";

// Generar un nonce (debe ser único por mensaje)
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);

// Generar una clave secreta (compartida entre las partes)
$key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);

// Cifrar el texto
$ciphertext = sodium_crypto_secretbox($plaintext, $nonce, $key);

echo "Texto cifrado: " . bin2hex($ciphertext);

// El nonce debe transmitirse junto al mensaje para descifrar

Descifrar el texto

<?php
// Descifrar el texto cifrado
$decrypted = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);

if ($decrypted === false) {
    echo "Error al descifrar.";
} else {
    echo "Texto descifrado: " . $decrypted;
}
?>

Consideraciones de seguridad

  • Clave secreta: Es crucial que la clave esté protegida, ya que cualquier persona con acceso a esta puede descifrar los datos.
  • Nonce único: Nunca reutilices un nonce para cifrar dos mensajes con la misma clave. Esto comprometería la seguridad del cifrado.
  • Almacenamiento seguro: Utiliza soluciones seguras para almacenar claves, como un gestor de secretos o una solución de hardware.

Recursos adicionales

Consulta la documentación oficial de Sodium en PHP para más detalles.

Etiquetas:
php
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer