Helper Crypt.
Funciones de encriptación de datos

Code Helper

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, '#'));
    }

}

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada.