Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Last active July 23, 2019 17:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parzibyte/2b87bc9ed58f0d90d34d38f6485f7e6c to your computer and use it in GitHub Desktop.
Save parzibyte/2b87bc9ed58f0d90d34d38f6485f7e6c to your computer and use it in GitHub Desktop.
Cifrar un archivo completo con PHP https://parzibyte.me/blog
<?php
/**
* Cifrar un archivo con php-encryption
*
* https://parzibyte.me/blog
*
*/
require_once "vendor/autoload.php";
use Defuse\Crypto\Exception\EnvironmentIsBrokenException;
use Defuse\Crypto\Exception\IOException;
use Defuse\Crypto\Exception\WrongKeyOrModifiedCiphertextException;
use Defuse\Crypto\File;
use Defuse\Crypto\Key;
// Cualquier archivo es válido
// El archivo que se va a cifrar
$rutaArchivoEntrada = __DIR__ . "/kotlin.png";
// El archivo de salida; es decir, el que estará cifrado
$rutaArchivoSalida = __DIR__ . "/kotlin.cifrado.png";
// No olvides guardar la clave en un lugar seguro; aquí lo pongo así de simple para ejemplos de
// simplicidad
$contenido = file_get_contents("clave.txt");
// Cargar la clave desde una cadena ASCII (pues la clave no es tan legible ni entendible como una simple cadena)
$clave = Key::loadFromAsciiSafeString($contenido);
// Y ya podemos cifrar el archivo
try {
File::encryptFile($rutaArchivoEntrada, $rutaArchivoSalida, $clave);
echo "Archivo $rutaArchivoEntrada cifrado dentro de $rutaArchivoSalida";
// Opcionalmente podrías eliminar el original:
# unlink($rutaArchivoEntrada);
# El manejo de excepciones es opcional ;)
} catch (IOException $e) {
echo "Error leyendo o escribiendo archivo. Verifica que el archivo de entrada exista y que tengas permiso de escritura";
} catch (EnvironmentIsBrokenException $e) {
echo "El entorno está roto. Normalmente es porque la plataforma actual no puede encriptar el archivo de una manera segura";
} catch (WrongKeyOrModifiedCiphertextException $e) {
echo "La clave es errónea o alguien la intentó modificar, cuidado";
}
def00000180bb725822d130c3e64f1c8c4544f468b91cc42b640c5d7a06a0eb0d3aa9cec0b9f44e407fbc674611f82b71555a9bb4c7f5a17ff9bd328eeb797a3fd288797
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment