Lenguaje PHP

Cómo desencriptar MD5 en PHP

Cómo desencriptar MD5 en PHP. En este articulo veremos la función md5 de PHP, sintaxis, ejemplos. Además, veremos como encriptar cadenas de texto y cómo funciona md5.

¿Cómo descifrar contraseñas MD5 en PHP?

El algoritmo criptográfico MD5 no es reversible, es decir, no podemos descifrar un valor hash creado por el MD5 para devolver la entrada a su valor original. Por lo tanto, no hay forma de descifrar una contraseña MD5. Pero, podemos usar algo como la piratería de fuerza bruta, que es extremadamente intensiva en recursos, no práctica y poco ética.

Además, si alguien está ingresando la contraseña correcta, necesitamos encontrar el valor hash de lo que el usuario ingresó y ver si coincide con lo que tenemos en nuestra base de datos, por lo que es un trabajo intensivo en tiempo y recursos para realizar.

¿Qué es el hash MD5?

  • Es un algoritmo hash MD5 genera una cadena de 32 caracteres (hexadecimales) para cualquier palabra o frase que demos en la entrada. Incluso podemos cifrar un archivo completo en un hash MD5.
  • El algoritmo también se puede usar para aplicaciones de firma digital, donde un archivo grande se comprime de manera segura y luego se cifra con la ayuda de una clave privada.

¿Por qué necesitamos MD5 en PHP?

Un ejemplo podría ser el almacenamiento y gestión de contraseñas de usuario para evitar accesos no autorizados. El hash de contraseña se puede definir como un método que toma la contraseña o cadena del usuario y lacifra en una contraseña de longitud fija.

PHP tiene algunas funciones para lograr lo mismo, como md5(), sha1(), hash().

¿Cómo podemos usar MD5 en PHP?

Para calcular el hash MD5 de una cadena, PHP tiene una función predefinida md5(). La función md5() calcula el hash MD5 de una entrada de cadena y devuelve el número hexadecimal hash. La función md5() utiliza el algoritmo de resumen de mensajes MD5.

Sintaxis de la función md5:

<?php
md5(string,raw)
?>
  • Cadena (string).- Es obligatorio y es la cadena de entrada que necesita ser calculada
  • Proceso (raw).- Opcional y especifica el formato de salida binario o hexadecimal:
        • Si se establece en VERDADERO: formato binario sin procesar de 16 caracteres
        • Si se establece en FALSO: predeterminado. número hexadecimal de 32 caracteres

    ¿Qué salida genera la función md5?

    md5() devuelve hash como un número hexadecimal de 32 caracteres.

    Es posible adivinar cuál es la contraseña original buscando en diccionarios de hashes MD5 de muchas palabras conocidas, estos diccionarios pueden ser útiles para decirle a un usuario que la contraseña que ha elegido puede ser fácilmente descubierta, por lo que podemos pedirle al usuario que construya una contraseña más segura.

    Ejemplos para descifrar la contraseña MD5

    <?php
    $string = "PHP-Framework";
    echo "Su cadena de testo es:".$string;
    echo "<br>";
    echo "Cadena generada por la función md5 es ".md5($string);
    ?>

    La salida en el navegador

    Su cadena de testo es:PHP-Framework
    Cadena generada por la función md5 es 9f7100d7e6e25c8746039cae0e198c35

    En el ejemplo anterior, hemos imprimido el valor hash de «PHP-Framework» generado por la función md5() en PHP.

    <?php
    $string = "PHP-Framework";
    if (md5($string) =="9f7100d7e6e25c8746039cae0e198c35"){
    echo "El texto es (PHP-Framework)";
    }
    else {
    echo "Validacion incorrecta";
    }
    ?>

    Salida en el navegador

    El texto es (PHP-Framework)

    En el ejemplo anterior, verificamos si el valor hash de la variable $string es igual a 9f7100d7e6e25c8746039cae0e198c35 usando la condicional IF ELSE de PHP. Por lo tanto, al ejecutar el script el programa imprime «El texto es (PHP-Framework)» porque encontró igualdad en la condonar, caso contrario, imprime «Validación incorrecta«.

    Validar contraseña usando FORM y MD5

    <?php
    $password= "pass123";
    
    if (isset($_POST['password']) && !empty($_POST['password']))
    {
    $new_password=$_POST['password'];
    
    if(md5($new_password)==md5($password))
    {
    echo "<br> Contraseña correcta ";
    }
    else{
    echo "<br>Contraseña incorrecta ";
    }
    }
    
    ?>
    
    <form action="" method="post">
    <input type="text" name="password">
    <br>
    <input type="submit" >
    </form>

    Explicación del código anterior:

    Al ejecutar el script anterior da una salida de un formulario HTML con un bloque de texto y un botón de envío de formulario, si ingresamos la contraseña correcta, imprime «Contraseña correcta» de lo contrario imprime «Contraseña incorrecta«.

    Todo el proceso es validado por la función MD5 y haciendo uso de condicionales de declaración de variables como ser la función ISSET y condicional de igualdad

    Conclusiones

    Para desencriptar texto cifrado mediante MD5 se podía usar la función mcrypt_decrypt o mcrypt_create_iv pero ya quedaron obsoletas y retirada del PHP en versiones superiores a php 7.2.

    <?php
    function encriptar($texto){
    $key='palabraclaveparalacodificacionydecodificacion'; // Una clave de codificacion, debe usarse la misma para encriptar y desencriptar
    $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $cadena, MCRYPT_MODE_CBC, md5(md5($key))));
    return $encrypted;
    
    };
    
    
    function desencriptar($texto){
    $key='farmaciajuntoati'; // Una clave de codificacion, debe usarse la misma para encriptar y desencriptar
    $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($cadena), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
    return $decrypted;
    }

    Advertencia

    Esta función ha sido OBSOLETA a partir de PHP 7.1.0 y ELIMINADA a partir de PHP 7.2.0. Se desaconseja encarecidamente confiar en esta función.

    Si desea usar la función anterior puede usar la versión de PHP 7.1 o inferior para poder desencriptar contenido cifrado.
    Espero que esta breve explicación les ayude a despejar sus dudas acerca de esta función MD5 en PHP y no s olviden de compartir en las redes sociales.

    Nestor Tapia

    Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Botón volver arriba