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 {
public static void main(String[] args)
{
String resultado = null;
String match = "79661ff25e39af70fc48d7785f587e85";
char[] mapaChars = {'A','B','C','D'};
int longitud = 3;
int posibles = (int) Math.pow(longitud,mapaChars.length);
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);
String resultadoFinal = new String(resultadoTemporal);
String resultadoEncriptado = new String(Encriptor.encriptaMD5(resultadoFinal));
if(resultadoEncriptado.equals(match))
{
resultado = resultadoTemporal.toString();
System.out.println("Hash crackeada con exito!\n" + resultadoFinal);
break;
}
char[] mapaChars = {'A','B','C','D'};
int longitud = 3;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package funcional;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author debci
*/
public class Generador {
private char[] mapaChars;
private boolean acabado = false;
private Generador(int ArgCount, char[] ArgAlpha) {
mapaChars = ArgAlpha;
}
public static void main(String[] args) {
Generador generador = new Generador();
generador.getAllCombo();
}
private Generador() {
}
public void getAllCombo() {
String resultado = null;
String match = "79661ff25e39af70fc48d7785f587e89";
char[] mapaChars = {'A','B','C','D','E','F','\0'};
int longitud = 7;
BigInteger largo = BigInteger.valueOf(mapaChars.length);
BigInteger posibles = largo.pow(longitud);
System.out.println("[!]Hay " + posibles + " combinaciones posibles.");
char[] combinacion = new char[longitud];
int[] indice = new int[longitud];
while(!acabado)
{
try{
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];
}
String resultadoFinal = new String(resultadoTemporal);
String resultadoEncriptado = new String(this.encriptaMD5(resultadoFinal));
System.out.println(resultadoFinal + " =======> " + resultadoEncriptado);
if(resultadoEncriptado.equals(match))
{
resultado = resultadoTemporal.toString();
System.out.println("Hash crackeada con exito!\n" + resultadoFinal);
break;
}
indice[0]++;
//System.out.println("[!]Quedan " + posibles + " combinaciones.");
if(posibles.equals(BigInteger.ONE)) {
acabado = true;
}
posibles = posibles.subtract(BigInteger.ONE);
}catch(ArrayIndexOutOfBoundsException e){
}
}
}
public static String encriptaMD5(String toEnc)
{
MessageDigest mdEnc = null;
try {
mdEnc = MessageDigest.getInstance("MD5"); // Encryption algorithm
} catch (NoSuchAlgorithmException ex) {
System.err.println("No se ha encontrado el algoritmo.");
}
mdEnc.update(toEnc.getBytes(), 0, toEnc.length());
String md5 = new BigInteger(1, mdEnc.digest()).toString(16);
return md5;
}
}
int posibles = (int) Math.pow(longitud,mapaChars.length);
AAA AAB AAC AAD ABA ABB ABC ABD ACA ACB ACC ACD ADA ADB ADC ADD | BAA BAB BAC BAD BBA BBB BBC BBD BCA BCB BCC BCD BDA BDB BDC BDD | CAA CAB CAC CAD CBA CBB CBC CBD CCA CCB CCC CCD CDA CDB CDC CDD | DAA DAB DAC DAD DBA DBB DBC DBD DCA DCB DCC DCD DDA DDB DDC DDD |
Cita de: egyware en 30 Agosto 2010, 05:36 AMPues dependeria mucho de tu ordenador, y del algoritmo en si, además este es inutil si no conoces la longitud de la cadena pasada a hash.
Asi de ser pesado, solo para molestar pero también dejando una propuesta para mejorar el conocimiento.
Me gustaria saber mucho de que complejidad son los algoritmos presentados aqui en función del largo de la cadena que se desea obtener por ejemplo.
Esto es util ya que si quiero desencryptar un MD5 cuanto tiempo me tomara a priori sin a ejecutar tal algoritmo.
Espero que me respondan.
Saludos ;D ;D ;D
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package funcional;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author debci
*/
public class Generador {
private char[] mapaChars;
private boolean acabado = false;
private Generador(int ArgCount, char[] ArgAlpha) {
mapaChars = ArgAlpha;
}
public static void main(String[] args) {
Generador generador = new Generador();
generador.getAllCombo();
}
private Generador() {
}
public void getAllCombo() {
String resultado = null;
String match = "79661ff25e39af70fc48d7785f587e89";
char[] mapaChars = {'A','B','C','D','E','F',' '};
int longitud = 7;
BigInteger largo = BigInteger.valueOf(mapaChars.length);
BigInteger posibles = largo.pow(longitud);
System.out.println("[!]Hay " + posibles + " combinaciones posibles.");
char[] combinacion = new char[longitud];
int[] indice = new int[longitud];
while(!acabado)
{
try{
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;
}
}
//Asignamos la combinación numérica al vector de caracteres
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];
}
String resultadoFinal = new String(resultadoTemporal);
String cadenaFormateada = new String();
/* Formateamos la cadena quitandole los espacios existentes para */
/* generar todas las formas posibles */
for (int x = 0; x < resultadoFinal.length(); x++) {
if (resultadoFinal.charAt(x) != ' ') {
cadenaFormateada += resultadoFinal.charAt(x);
}
}
String resultadoEncriptado = new String(this.encriptaMD5(cadenaFormateada));
System.out.println(cadenaFormateada + " =======> " + resultadoEncriptado);
if(resultadoEncriptado.equals(match))
{
resultado = resultadoTemporal.toString();
System.out.println("Hash crackeada con exito!\n" + resultadoFinal);
break;
}
indice[0]++;
//System.out.println("[!]Quedan " + posibles + " combinaciones.");
if(posibles.equals(BigInteger.ONE)) {
acabado = true;
}
posibles = posibles.subtract(BigInteger.ONE);
}catch(ArrayIndexOutOfBoundsException e){
}
}
}
public static String encriptaMD5(String toEnc)
{
MessageDigest mdEnc = null;
try {
mdEnc = MessageDigest.getInstance("MD5"); // Encryption algorithm
} catch (NoSuchAlgorithmException ex) {
System.err.println("No se ha encontrado el algoritmo.");
}
mdEnc.update(toEnc.getBytes(), 0, toEnc.length());
String md5 = new BigInteger(1, mdEnc.digest()).toString(16);
return md5;
}
}