Skip to content

Instantly share code, notes, and snippets.

@nakome
Last active March 15, 2023 18:43
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 nakome/a35c9fa073d62d86736305bb5506ec39 to your computer and use it in GitHub Desktop.
Save nakome/a35c9fa073d62d86736305bb5506ec39 to your computer and use it in GitHub Desktop.
[Clase Crypto] clase en php para codificar y decodificar #php

Esta es una clase PHP llamada "Crypto" que se utiliza para cifrar y descifrar cadenas de texto utilizando OpenSSL. La clase tiene tres métodos, el constructor y dos métodos públicos "encrypt" y "decrypt".

El constructor acepta una cadena de texto que se utilizará como clave para el cifrado y se guarda en una propiedad privada de la clase llamada "key".

El método "encrypt" toma una cadena de texto como entrada y devuelve una cadena de texto cifrada. Primero genera un vector de inicialización aleatorio utilizando la función "openssl_random_pseudo_bytes". Luego, utiliza la función "openssl_encrypt" para cifrar la cadena de texto utilizando el algoritmo AES-256-CBC. Finalmente, combina el valor cifrado y el vector de inicialización en una cadena codificada en base64 y la devuelve.

El método "decrypt" toma una cadena de texto cifrada como entrada y devuelve la cadena de texto original descifrada. Primero decodifica la cadena codificada en base64 y separa el valor cifrado y el vector de inicialización utilizando la función "explode". Luego, utiliza la función "openssl_decrypt" para descifrar la cadena de texto utilizando el mismo algoritmo AES-256-CBC y la misma clave y vector de inicialización que se utilizaron para cifrar la cadena. Finalmente, devuelve la cadena de texto descifrada.

En general, esta clase es útil para cifrar y descifrar datos confidenciales en aplicaciones PHP. Sin embargo, es importante tener en cuenta que el cifrado no es una solución completa para la seguridad y que es necesario tener en cuenta otros factores, como la autenticación y la autorización, para garantizar la seguridad de los datos.

Este es un ejemplo de el texto anterior encriptado: OEhUUXRYd3VrbWxzazFieTIwWERaakp3cmo1UTkwSUNDb1VjNUJ0TDY2b1Vjdk5UZDBLWGRRczVtcFJXSWlTQkQrek9WU0J5K2twZnl2aXVIK1FHQndIbGFYeDM0U0JNZEYrWHNnNThPajdBWjJVbUFlTWlGS0c3ekVGeXRYTFExQlNOS1JRblNNYWJtQ0I4aFFHUk9LSnVzWGQ5K200SlNqN3hNelhvYjRURXMzRmRnbGkwczJKUk9BcFBDK0FhMGtDQWpYcGtDS1FWKzlUbndZYXEycm1hU3NlbC9ua2FuSlRyeVBvdmg0NkIwcGpudW5WdmJTVWxrWkJROVd3SFF4YjYrZjRJdCtGcktqR2tDRlNLU1NXcUdVV0ZpSjRYc1BFKzBGbTJMMHpjU2gyeDY5ZDIram9EOElVTElpRWVMUGZCcW5sS0s0UFQ2Tzc2UFVUamVCSTRhaWVHcVc2TDRId1VabjVXbEZmT2hQcy9RcEMyVlpiYmRqUysrVEFabTNwaXFBMWRJMTZBeEFHUmtjU3hHUFhmU0gzTXQ2dzYzd2JFQ1plaDdGVk5LSE9NOWxNTTg5dlQvbCtOd1pLc1BWdkgwV2FSVXE1OWRFRkMwMWt0N05xUm4xa05hRW1UWmcreHUzNHd0MGVVM1huOEIvNUJDRUVJdVM3TWpyVkxrZ2d2MDRXWGNIRm5hNURFQlFkRy9ma0NtTUVTWnlWWEJJM2xOQm16Q0hUTGJnVDRCZlNCQXhQUTBTRnpva0ZCMmRVWDBTU21aRkxxUXRaVzFrZWtOTGFIVXowejc3UVJOclR2cVErRWl0aE5jazZqNGJqSzVGL0FsQUs3Z2hKTUxvOHg0bWx1cWpxRW9tSG9sVjh6V09vamRGVHJUV2lJbjE3TlIwVFlyZ2o4MXJGbEs5bzVIUkFJQ2lsTFYyOWFvNmlBN3pVUTQ0UkJiSnlpZFluVngyaFF5QnA2cDVuOXphaTY0L05KQzJxQWlPZG9nZWdTSHdzdWR6dHVGV0NNNWc3YVpVR3BtVis1eHc4OWs1YkdjRldrUmQzUVJBd0tNWEJsSDM1Vk4yMFFOMnU4bU9yd1RjWlpEQ2hnZzc0My9NVkZ6SFJKdnhyTnQ5bnErQ0d0cUpoYkdSS2QrVDVTSHAwMDNmY3VGSGJlSHVkYWVIMEY1Y24vc3Rpa2lDSzRSS2ZodWtoOWRkMXM5VHBSMW1jOC9LUEp3cUdwTFhlUEZ5QUJWRFh3amxDanE1ZWZSV3hBTjZPRlVjcEZlKzhSdmxyKzhHZzI3YTFkVnJFMGRTTm16VUJDb3hCSFV1RUlWSm9yK0I3YSswaG1heEcvT1JXUmJRZmdvdGNQU0xhWG1VQWxlRWFiMzBHRTRMVWNNckNlOUVUVHJ3QUNqWjdCbDhEOU1XYWFGY3U3eFlINjFFZUdOaVZKRUxIMUt2K0UxY0ZPSW5jL2FSUFRxVHBCS01lMHp0d2dFeUpyN0NUYTFCZG9OOEY5TC91SmFmZ2JKRktvOHNnTXpLK21uMU43MUJFeEl4dzF6MFpjR2EzakRUaC8ydVp3UStjajNrUUhOUVhwMFBzczRCcmgzVDhTejU2WFBZM3ZLUkh2LzZpeExBNXJVWWxFQi84NkhkZVJPNG9YS0krK09IMk5vTGl4TzZMa3F3R095Mm9UNU9kSVZNYmdoSnIrSk9QaWJNYzlsUXdwZk9WRThkMkF1cjFNaGlTcmRUMG03SWp0UE0xVEtnYXlmZ29oaUJaZnlUZ1UvbnBmbVIwN1JIbU0yZWtnWUt4a3ovbXBsMHJNaGNYdTJHV0gvZmFsalNKNTh2eXBzN3VoVjlpMWN4eUlkTWFQa3FCdjQwNCt3TEk4djdzb3RXaXJBSU9HQ2RaY0dhT3FWOEVZOVFSU3kxZmlvY0R3UDNMNXdtT2NMdzQxY0VGUTBNTHRzTDY5QmUxYWM4VzlCSDY3bHg3Rnd4djB4STZlQ3I5Y2M0b3BKbjVpenkvZk9EVkxoMXllYjNuR1c0QnN3aXlYNXZpc1hSSHpRV29DZ25tVVZVLzkrWlIxMXE0N0RxMTVYT2M2WHN3bHJkOSthRGFXM3NLSzhnS0dsSS9YclQ2YmRoWWZaVDdCMDVCS1IvR3g3dzRwOUo0NS9Kd3dISDdXT1FyVmRWTUxBNWRzRVR6RDIzOWdlaFZpTHpYK1pNV2FtRHpOa3lncTdmNmpZbHRGS2t3TDNKb2RZU2JSTWxWTGhRNGthMGdOZnVuMUpOb29RK0crVytGRU5pZFhuUnlkYTM5cFRuVmVvZ3ZRNG9LcFo5MGlscTB4ZXdSWkl5Nm1sdmZWTm5uR3l4ZFJwZVpRZUlaN2hSODNiNzVzWWFRQXo4VGgrd1dlckhndlFPOU4zOHpCLzEzWG1JVGRJZHpNblVTcGJKZkFnclBkMFRjZkN1NWdHYzBWSGpVd2daUE0zb3VRNXQwakIxOUN6aFF0MDJNbmxLcWtKd0xlY2dvcktGekF2a3VRcHFrUkszbU1oc3kzakowd05JZTh5UlIxWjJGNTl4akxXWVJ4TDk4c2QzSDE4WlQyTHUzWHkxM0lCL3lYUzhaMVl0WlJOOHlUVlZrZmFJU0ozVkI3aldveXBXZkhEYkEvL25LR2s2V01DeGo3YjN2cVRwQTMrZHI4dFhKVDJTeGRIQ0RHbVBVMm12OUJ2eDhpL0EzZEdCL1dEcUI3c3AxUkJWVUgvS2VtdldhaU5GSk5TQ3JFaW9vMldjYWJhcU0rZmVYNTZaVVlBNTVrVVhqMlEzSElud29yQ3pDTHk5V0RnYUxacnA2aGRsemdid1krUnVEK0NKbHNmSUxLNHJsT1BQUkQyZzRMazFwOSttNXFFdG5VenFNeEdlNFdnMTdCVU4vNEZiMXhzSnU3ejI1OElpUTdjYnBXSGREbWNnU1FaR0x1OTZvNlU1WGEzbFk9Ojq6jHOL6ANn1RKuzt16iIUP

<?php
class Crypto {
private $key;
public function __construct(string $key) {
$this->key = $key;
}
public function encrypt(string $value): string {
// Generar un vector de inicialización aleatorio
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
// Encriptar el valor utilizando OpenSSL
$encrypted = openssl_encrypt($value, 'aes-256-cbc', $this->key, 0, $iv);
// Combinar el valor encriptado y el vector de inicialización en una cadena codificada en base64
return base64_encode($encrypted . '::' . $iv);
}
public function decrypt(string $value): string {
// Decodificar la cadena codificada en base64 y separar el valor encriptado del vector de inicialización
$parts = explode('::', base64_decode($value), 2);
// Desencriptar el valor utilizando OpenSSL
$decrypted = openssl_decrypt($parts[0], 'aes-256-cbc', $this->key, 0, $parts[1]);
// Devolver el valor desencriptado
return $decrypted;
}
}
// Crear una nueva instancia de Crypto
$crypto = new Crypto("esta-es-la-clave-secreta");
// Encriptar un valor
$encrypted_value = $crypto->encrypt("Este es un valor secreto");
// Imprimir el valor encriptado
echo $encrypted_value;
// Desencriptar el valor
$decrypted_value = $crypto->decrypt($encrypted_value);
// Imprimir el valor desencriptado
echo $decrypted_value;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment