PHP – Encriptar – Encriptar aleatoria sin clave
Como al encriptar por transposición siempre devuelve el mismo texto encriptado para el mismo texto determinado, en esta opción se añade al final un número generado de forma aleatoria con un separador para poder diferenciarlo en la desencriptación.
De esta manera nos aseguramos que el mismo texto siempre devuelva una encriptacion diferente.
En la salida enciptada en Base64 se sustituyen los caracteres ‘+’, ‘=’ y ‘/’ por ‘-‘, ‘,’ y ‘_’ para no tener problemas con posibles URls
/** * Class HelperEncriptar */ abstract class HelperEncriptar { /** * Encripta un valor de forma que siempre de diferente. * Se le concatena la fecha y hora. * Se reemplazan los caracteres +=/ por -,_ * * @param string $plano * * @return string */ public static function encriptarAleatorio( $plano ) { $numDigitos = 6; $random = ''; for ( $n = $numDigitos; $n > 0; $n-- ) { $generado = ''.mt_rand( ); $posicion = mt_rand( 1, strlen( $generado ) - 1 ); $random .= $generado[ $posicion ]; } $txt = $plano.'#'.$random; $encript = HelperEncriptar::encriptarTransposicion( $txt ); // Sustituimos en el Base64 los caracteres +=/ ya que // pueden dar problemas en la url return str_replace( array( '+', '=', '/' ), array( '-', ',', '_' ), $encript); } /** * Desencripta un valor. * * @param string $txt_encript * * @return string */ public static function desencriptarAleatorio( string $txt_encript ) { /* Restablecemos los caracteres +=/ */ $encript = str_replace( array( '-', ',', '_' ), array( '+', '=', '/' ), ''.$txt_encript ); $plano = HelperEncriptar::desencriptarTransposicion( $encript ); /* Devolvemos hasta el último separador */ return substr( $plano, 0, HelperString::indexOfLast( $plano, '#' ) ); } }
Funciones relacionadas:
- HelperEncriptar::encriptarTransposicion : Encriptar y desencriptar por transposición sin necesitar clave
- HelperString::indexOfLast : Devolver la posición de la última ocurrencia de un texto