MD5 roto modo de encriptar no seguro

MD5 roto modo de encriptar no seguro

MD5 roto, modo de encriptar no seguro es una familia de funciones SHA que aprecio en el año 1993, que fue creado en si en al año 1991 por el Ronald Rivest del MIT y con los años  fue mejorando paulatinamente con las nuevas versiones,  hasta que en el año 2009  fue roto por  un equipo de investigadores liderado por Alexander Sotirov y Jacob Appelbaum  y luego en el año 2004 los hackers chinos demuestran de nuevo la vulnerabilidad de MD5 SHA1 creando dos archivos diferentes que tenían el mismo hash MD5, por tal razón  MD5 para los criptógrafos y hackers experimentados no se considera algoritmo de criptografía porque se puede romper usando colisiones matemáticas y fuerza bruta.

¿Hasta el momento existen algoritmos criptográficos seguros?

Se puede decir que si, porque uno nunca sabe cuando será roto el cuyo algoritmo criptográfico. Solar Designer, diseñó una clase muy sencilla para generar hashes utilizando  el algoritmo mas seguro hasta ahora, ya que este mismo algoritmo es usado  como en: Joomla, Wordpres y demás.

El algoritmo está disponible para implementarlos en nuestros proyectos para los lenguajes de programación que se menciona en los siguientes párrafos, y se muestra como implementar.

Mucho ojo al implementar las contraseñas no deben ser mas de 72 caracteres, esto para evitar  ataque de denegación de servicio.

phpass para PHP

Para implementar en nuestro proyecto de código PHP se debe descargar de la siguiente página http://www.openwall.com/phpass/ donde dice Download.

Después de descargar se debe incluir el archivo en lugar donde está tu proyecto, he aquí un ejemplo cómo utilizar.

<?php 
require_once("PasswordHash.php");
//Instancia de la clase
$ecnriptar = new PasswordHash(8, FALSE);

//Contraseña
$laClave="test12345";
//Generando el HASH
$hash = $ecnriptar->HashPassword($laClave);
//Se imprime le HASH
echo  'Hash: ' . $hash . "\n";
//Se hace la comparion de la contraseña
if($ecnriptar->CheckPassword($laClave, $hash)){
	echo "La contraseña que escribiste es correcto";
}else{
	echo "Error al intentar escribir contraseña";
}

?>

phpass para Java

Librería implementada para java basado en el  marco de hash portátil contraseña PHP , se puede descargar la libreria de Github  https://github.com/Mollom/phpass-java , en el siguiente ejemplo se muestra como usar:

package com.mollom.phpass;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
public class PasswordHasherTest {
  private PasswordHasher hasher;
  @Before
  public void setup() {
    hasher = new PasswordHasher();
  }
  @Test
  public void testIsMatch_matchesCorrectSolution() {
    // Se puede probar con varios casos
    assertTrue(hasher.isMatch("huan", "$S$DXZrp425p2VN9LXpDWxiBeqSZSPexyZNNPUo80fTTN2e/W15a97G"));
    assertTrue(hasher.isMatch("Cookies1", "$S$Dr3Hm8Od9X0Ux/olZ.B8Uwh6./3E1l4nPfXebovKVvMB9zcmjkTn"));
  }
  @Test
  public void testIsMatch_failsIncorrectSolution() {
    assertFalse(hasher.isMatch("OHH NO! Not cookies!", "$S$Dr3Hm8Od9X0Ux/olZ.B8Uwh6./3E1l4nPfXebovKVvMB9zcmjkTn"));
  }
  @Test
  public void testIsMatch_failsEmptySolution() {
    assertFalse(hasher.isMatch("", "$S$Dr3Hm8Od9X0Ux/olZ.B8Uwh6./3E1l4nPfXebovKVvMB9zcmjkTn"));
  }
  @Test
  public void testCreateHash_matchesOriginalPassword() {
    //Contraseña
    String password = "ThisIs@C♥mplexPÃssword™123";
    //HASH generando
    String hash = hasher.createHash(password);
    //Verificando la contraseña
    assertTrue(hasher.isMatch(password, hash));
    assertFalse(hasher.isMatch("NotTheSamePassword", hash));
  }

phpass para C#

Es una librería implementado basado en  phppass de openwall para C# que se puede descargar de la siguiente pagina  http://pastebin.com/XHNV9CT3 , en elsiguiente ejemplo de código se muestra como usar:

using System;
namespace PHPass
{
	class Program{
		
		public static void Main(string[] args){

       //Instancia de la clase
       phpBBCryptoServiceProvider Incriptar=new phpBBCryptoServiceProvider();
        //Paswor
        String Contrasena="Test12345";
        //Almacen el Hash
        String Hash="";
        //Generando Hash
        Hash=Incriptar.phpbb_hash(Contrasena);
       //Comparando la contraseña
        if(Incriptar.phpbbCheckHash("Test12345", Hash)){
        	Console.WriteLine("Corecto");
        }else{
        	Console.WriteLine("Incorrecto");
        }	
		}
	}
}

phpass para Python

Una clase que es implementado basado en phpass para python, esta clase puede descargar de la siguiente pagina https://pythonhosted.org/passlib/  , en el siguiente codigo se muestra como usar:

>>># importando la libreria
>>> from passlib.hash import sha256_crypt

 # generando el Hash
 >>>hash = sha256_crypt.encrypt("toomanysecrets")
 >>>hash '$5$rounds=80000$zvpXD3gCkrt7tw.1$QqeTSolNHEfgryc5oMgiq1o8qCEAcmye3FoMSuvgToC'

>>> #Verficando la contraseña
>>> sha256_crypt.verify("toomanysecrets", hash)
True
>>> sha256_crypt.verify("joshua", hash)
False

La buena practica siempre debe importar en el tiempo de desarrollo de nuestros proyectos  ya que se debe realizar  test, de esa forma nos aseguramos  de otras vulnerabilidades.

Fuente: 

Sobre el autor
Rodrigo Chambi Q.

Desarrollador de aplicaciones web y de escritorio, amante de la tecnología y autodidacta, me gusta conocer otras tecnologías, escribir artículos para compartir en la web y para estar al tanto en los nuevos paradigmas, respeto las políticas de software privativo y libre, ya que estas políticas son las normas que permite el desarrollo tecnológico social de la humanidad. filvovmax@gmail.com -- info@gitmedio.com

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.