Tal como esta el codigo puesto (podeis modificar 2 parametros para ampliarlo), puede descifrar cualquier cadena de texto de 3 caracteres que contenga A,B,C por lo que yo he usado como ejemplo el siguiente hash:
md5("ACB") = 79661ff25e39af70fc48d7785f587e85;
Vamos a cualquier pagina de cifrado MD5 y le metemos el siguiente texto para cifrar:
ACB y obtenemos que la hash es: 79661ff25e39af70fc48d7785f587e85
Si no sabemos como devolverla al estado original ahora viene cuando actua mi programa:
Código
Encriptad cualquier cadena con los caracteres:
import java.lang.String; import java.math.BigInteger; import java.security.MessageDigest;root import java.security.NoSuchAlgorithmException; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Debci */ public class Encriptor { { char[] mapaChars = {'A','B','C','D'}; int longitud = 3; char[] combinacion = new char[longitud]; int[] indice = new int[longitud]; for(int i = 0; i < posibles;i++) { for(int x = 0; x < indice.length; x++) { if(!(x==indice.length)) { if(indice[x] == mapaChars.length) { indice[x] = 0; indice[x+1]++; } }else{ indice[x] = 0; } } for(int h = 0; h < longitud; h++) { combinacion[h] = mapaChars[indice[h]]; } char[] resultadoTemporal = new char[longitud]; for(int j = 0; j < combinacion.length; j++) { resultadoTemporal[j] = combinacion[j]; } //System.out.println(resultadoTemporal); if(resultadoEncriptado.equals(match)) { resultado = resultadoTemporal.toString(); break; }
Código
Añadid los que querais, para crackear cualquier hash, el algoritmo esta diseñado para adaptarse a un nuevo dicionario y a la longitud de la hash variable:
char[] mapaChars = {'A','B','C','D'};
Código
Osea que es extensible, pero si aumentamos mucho puede no funcionar por limitaciones de datos tipo int, las posibilidades serian grandiosas y un int no puede con un dato asi de grande, por lo que ya trabajo en un método para no depender de la VM de java y almacenar dicho numero de combinaciones posibles en memoria directamente.
int longitud = 3;
Cabe mencionar que para entender el codigo quizás haya que tener un nivel medio-basico de combinatoria y matematicas estadisticas (sobre todo con probabilidad).
Disfruten el codigo!
Leyer estate tranquilo que esta quedando de coña!
Saludos