Helpers – Crypt – Encriptar y desencriptar datos
LibrerÃa para la encriptación y desencriptación de datos, urls e identificadores.
/** * HelperCrypt.php * @author Code Develium */ namespace Helpers; /** * Class HelperCrypt */ abstract class HelpCrypt { /** * Encriptación por trasposición * * @param string $str_plano * * @return string */ public static function encriptarTransposicion($str_plano) { $len = strlen($str_plano); $strEncrypt = ""; for ($position = 0; $position < $len; $position++) { $key_to_use = (($len + $position) + 1); $key_to_use = (255 + $key_to_use) % 255; $byte_to_be_encrypted = substr($str_plano, $position, 1); $ascii_num_byte_to_encrypt = ord($byte_to_be_encrypted); $xored_byte = $ascii_num_byte_to_encrypt ^ $key_to_use; $encrypted_byte = chr($xored_byte); $strEncrypt .= $encrypted_byte; } return base64_encode($strEncrypt); } /** * Desencriptación por trasposición * * @param string $strEncriptado * * @return string */ public static function desencriptarTransposicion( $strEncriptado ) { $strEncriptado = base64_decode($strEncriptado); $len = strlen($strEncriptado); $str = ""; for ($position = 0; $position < $len; $position++) { $key_to_use = (($len + $position) + 1); $key_to_use = (255 + $key_to_use) % 255; $byte_to_be_encrypted = substr($strEncriptado, $position, 1); $ascii_num_byte_to_encrypt = ord($byte_to_be_encrypted); $xored_byte = $ascii_num_byte_to_encrypt ^ $key_to_use; $encrypted_byte = chr($xored_byte); $str .= $encrypted_byte; } return $str; } /** * Encripta un texto mediante una contraseña * * @param $mensage * @param $clave * * @return string */ public static function encriptarConClave($mensage, $clave) { $textoEncriptado = ""; settype($mensage, "string"); $i = strlen($mensage) - 1; $j = strlen($clave); if (strlen($mensage) <= 0) { return ""; } do { $textoEncriptado .= ($mensage{$i} ^ $clave{$i % $j}); } while ($i--); $textoEncriptado = base64_encode( base64_encode( strrev( $textoEncriptado))); return $textoEncriptado; } /** * Desencripta un texto mediante una contraseña * * @param $mensaje * @param $clave * * @return string */ public static function desencriptarConClave($mensaje, $clave) { $textoPlano = ""; settype($mensaje, "string"); $mensaje = base64_decode(base64_decode($mensaje)); $i = strlen($mensaje) - 1; $j = strlen($clave); if (strlen($mensaje) <= 0) { return ""; } do { $textoPlano .= ($mensaje{$i} ^ $clave{$i % $j}); } while ($i--); $textoPlano = strrev($textoPlano); return $textoPlano; } /** * Encripta un valor de forma que siempre de diferente. * Se le concatena la fecha y hora. * Se reemplazan los caracteres +=/ por -,_ * * @param string $parametro_plano * * @return string */ public static function encriptarAleatorio($parametro_plano) { $numDigitos = 6; $random = ''; for ($n = $numDigitos; $n > 0; $n--) { $generado = ''.mt_rand(); $posicion = mt_rand(1, strlen($generado) - 1); $random .= $generado[ $posicion ]; } $url = $parametro_plano.'#'.$random; $url_encriptada = self::encriptarTransposicion($url); // Sustituimos en el Base64 los caracteres +=/ ya que pueden // dar problemas en la url return str_replace( array('+', '=', '/'), array('-', ',', '_'), $url_encriptada); } /** * Desencripta un valor. * * @param string $parametro_encriptado * * @return string */ public static function desencriptarAleatorio( $parametro_encriptado) { /* Restablecemos los caracteres +=/ */ $url_encriptada = str_replace( array('-', ',', '_'), array('+', '=', '/'), ''.$parametro_encriptado); $url_plano = self::desencriptarTransposicion($url_encriptada); /* Devolvemos hasta el último separador */ return substr($url_plano, 0, HelpString::indexOfLast($url_plano, '#')); } }