elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  RETOS C++
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 Ir Abajo Respuesta Imprimir
Autor Tema: RETOS C++  (Leído 51,010 veces)
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: RETOS C++
« Respuesta #30 en: 21 Septiembre 2012, 17:06 pm »

¡Buenas!

¿A que te refieres con un crackeador de MD5? ¿A redibir como argumento un hash y generar una cadena que de el mismo hash?
si

EI: juntando mensajes.

Ok, pero yo gano puntos o no? Se me ha adelantado por segundos :-[

Aqui esta en C++:

Código
  1. #include <fstream>
  2.  
  3. int main()
  4. {
  5. char vars[6];
  6. vars[5]='\n';
  7. ofstream diccionario.open("diccionario", ios::out);
  8. for(vars[0]='a'; vars[0]<'z'; vars[0]++)
  9. {
  10.   for(vars[1]='a'; vars[1]<'z'; vars[1]++)
  11.   {
  12.     for(vars[2]='a'; vars[2]<'z'; vars[2]++)
  13.      {
  14.        for(vars[3]='a';vars[3]<'z'; vars[3]++)
  15.         {
  16.  
  17.          for(vars[4]='a';vars[4]<'z'; vars[4]++)
  18.           {diccionario.write(vars, 6);}
  19.         }
  20.      }
  21.   }
  22. }
  23. diccionario.close();
  24. return 0;
  25. }

el a echo el 4 tambien

ahora lo k podeis hacer es competir para que vuestro porgrama sea más rapido  por ejemplo haciendo k el script en vez de imprimir por pantalla lo guarde en un fichero y el que lo haga más rapido gana 10 puntos +

EI: juntando mensajes.

0xdani

a.cpp: In function `int main()':
a.cpp:7: parse error before `.'


« Última modificación: 2 Octubre 2012, 14:26 pm por Eternal Idol 7D » En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: RETOS C++
« Respuesta #31 en: 21 Septiembre 2012, 17:24 pm »

0xdani

a.cpp: In function `int main()':
a.cpp:7: parse error before `.'

Código
  1. #include <fstream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. char vars[6];
  8. vars[5]='\n';
  9. ofstream diccionario;
  10. diccionario.open("diccionario", ios::out);
  11. for(vars[0]='a'; vars[0]<'z'; vars[0]++)
  12. {
  13.   for(vars[1]='a'; vars[1]<'z'; vars[1]++)
  14.   {
  15.     for(vars[2]='a'; vars[2]<'z'; vars[2]++)
  16.      {
  17.        for(vars[3]='a';vars[3]<'z'; vars[3]++)
  18.         {
  19.  
  20.          for(vars[4]='a';vars[4]<'z'; vars[4]++)
  21.           {diccionario.write(vars, 6);}
  22.         }
  23.      }
  24.   }
  25. }
  26. diccionario.close();
  27. return 0;
  28. }
  29.  

EI: juntando mensajes.

Alguien puede probar esto? No se si las librerias crypt.h y unistd.h funcionan en windows, pero para compilar: gcc md5.c -o md5 -lcrypt.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <unistd.h>
  4. #include <crypt.h>
  5.  
  6. int main(int argc, char* argv[])
  7. {
  8.    const char salt[] = "$1$........";
  9.    char *buf, pass[30];
  10.    FILE* file = fopen(argv[1], "r");
  11.    printf("Escribe el hash: ");
  12.    fgets(pass, 30, stdin);
  13.    while(!feof(file))
  14.    {
  15.     fgets(buf, 30, file);
  16.     buf = crypt(buf, salt);
  17.     if(!strcmp(pass, buf)) break;
  18.    }
  19.    printf("Password: %s", buf);
  20.    fclose(file);
  21.    getchar();
  22.    return 0;
  23. }

Le tienes que pasar un diccionario como argumento, y escribir el hash.

Saludos.


« Última modificación: 2 Octubre 2012, 14:26 pm por Eternal Idol 7D » En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: RETOS C++
« Respuesta #32 en: 21 Septiembre 2012, 17:51 pm »

no tnego el crypt.h por lo que no compila despues lo busco

el que haga el script de generar el diccionario mas rapido gana 10p
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: RETOS C++
« Respuesta #33 en: 21 Septiembre 2012, 17:59 pm »

8.

El crackeador de MD5. Compilado utilizando g++ funciona (probad con cadenas cortas y con minusculas). Supongo que podria fallar con otros compiladores o versiones de g++ distintas de la que tengo, a fin de cuentas no deja de ser un popurri de unos cuantos codigos que tenia hechos anteriormente. Mi version de g++ considera unsigned long de 32 bits y unsigned long long de 64. Tampoco se si funcionara en todos los casos, lo que si puedo asegurar es que con cadenas cortas y de minusculas funciona...

Código
  1. /*
  2.  * Linea de comandos:
  3.  *      nombreprograma hash
  4.  * Salida: Cadena cuyo hash MD5 es el que se ha recibido
  5.  *
  6.  *
  7.  * Dada una cadena MD5 devuelve una cadena de digitos hexadecimales de 32 bytes
  8.  *
  9.  *
  10.  * Considerando como conjunto de salida las cadenas de digitos hexadecimales de 32 bytes,
  11.  * MD5 sera por lo tanto suprayectiva y tendra que existir al menos una cadena de 32 bytes
  12.  * hexadecimales cuya imagen sea el valor que recibimos como parametro.
  13.  *
  14.  */
  15.  
  16. #include <cstdio>
  17. #include <cstdlib>
  18. #include <cstring>
  19. #include <string>
  20. #include <iostream>
  21.  
  22. using namespace std;
  23.  
  24. #ifndef ULL_MAX
  25.    #define ULL_MAX 0xFFFFFFFFFFFFFFFFULL
  26. #endif
  27. /*
  28.  *
  29.  * Calcula el MD5 del input y devuelve una cadena dinamica que lo contiene.
  30.  *
  31.  */
  32.  
  33. char* md5(char *input, unsigned long  long len);
  34.  
  35. /* Ajusta la cadena a una longitud multiplo de 512 - 64 bits y añade la longitud en 64 bits */
  36. unsigned long long md5_ajustar_datos(char **datos, unsigned long  long len);
  37.  
  38. unsigned long md5_extraer_submensaje(char *m , unsigned long sub , unsigned long bloque);
  39.  
  40. unsigned long md5FF(unsigned long *a,unsigned long b,unsigned long c,unsigned long d,unsigned long m,unsigned long s,unsigned long t);
  41. unsigned long md5GG(unsigned long *a,unsigned long b,unsigned long c,unsigned long d,unsigned long m,unsigned long s,unsigned long t);
  42. unsigned long md5HH(unsigned long *a,unsigned long b,unsigned long c,unsigned long d,unsigned long m,unsigned long s,unsigned long t);
  43. unsigned long md5II(unsigned long *a,unsigned long b,unsigned long c,unsigned long d,unsigned long m,unsigned long s,unsigned long t);
  44.  
  45. #define MD5_LONGITUD 32
  46.  
  47. #define md5_extraer_submensaje(m , sub , bloque) (((unsigned long*)(m))[(bloque) * 16 + (sub)])
  48.  
  49. #define md5F(X,Y,Z)(((X) & (Y)) | ((~(X)) & (Z)))
  50. #define md5G(X,Y,Z)(((X) & (Z)) | ((Y) & (~(Z))))
  51. #define md5H(X,Y,Z)((X) ^ (Y) ^ (Z))
  52. #define md5I(X,Y,Z)((Y) ^ ((X) | (~(Z))))
  53.  
  54. char* md5(char *input, unsigned long long len)
  55. {
  56.    unsigned long reg[4], aux_reg[4], bloque = 0, i, j;
  57.    unsigned long long longitud;
  58.    char *aux;
  59.  
  60.    if(!(aux = (char*) malloc(len * sizeof(char))))
  61.        return NULL;
  62.  
  63.    memmove(aux , input , len * sizeof(char));
  64.  
  65.    if(!(longitud = md5_ajustar_datos(&aux , len)))
  66.    {
  67.        free(aux);
  68.        return NULL;
  69.    }
  70.  
  71.    reg[0] = 0x67452301UL;
  72.    reg[1] = 0xEFCDAB89UL;
  73.    reg[2] = 0x98BADCFEUL;
  74.    reg[3] = 0x10325476UL;
  75.  
  76.    /* mientras haya bloques de 64 bytes (512 bits) */
  77.    while(longitud)
  78.    {
  79.        for(i = 0 ; i < 4 ; i++)
  80.            aux_reg[i] = reg[i];
  81.  
  82.        md5FF( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,0,bloque) ,7LU ,3614090360LU);
  83.        md5FF( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,1,bloque) ,12LU ,3905402710LU);
  84.        md5FF( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,2,bloque) ,17LU ,606105819LU);
  85.        md5FF( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,3,bloque) ,22LU ,3250441966LU);
  86.        md5FF( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,4,bloque) ,7LU ,4118548399LU);
  87.        md5FF( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,5,bloque) ,12LU ,1200080426LU);
  88.        md5FF( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,6,bloque) ,17LU ,2821735955LU);
  89.        md5FF( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,7,bloque) ,22LU ,4249261313LU);
  90.        md5FF( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,8,bloque) ,7LU ,1770035416LU);
  91.        md5FF( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,9,bloque) ,12LU ,2336552879LU);
  92.        md5FF( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,10,bloque) ,17LU ,4294925233LU);
  93.        md5FF( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,11,bloque) ,22LU ,2304563134LU);
  94.        md5FF( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,12,bloque) ,7LU ,1804603682LU);
  95.        md5FF( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,13,bloque) ,12LU ,4254626195LU);
  96.        md5FF( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,14,bloque) ,17LU ,2792965006LU);
  97.        md5FF( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,15,bloque) ,22LU ,1236535329LU);
  98.  
  99.        md5GG( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,1,bloque) ,5LU ,4129170786LU);
  100.        md5GG( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,6,bloque) ,9LU ,3225465664LU);
  101.        md5GG( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,11,bloque) ,14LU ,643717713LU);
  102.        md5GG( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,0,bloque) ,20LU ,3921069994LU);
  103.        md5GG( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,5,bloque) ,5LU ,3593408605LU);
  104.        md5GG( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,10,bloque) ,9LU ,38016083LU);
  105.        md5GG( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,15,bloque) ,14LU ,3634488961LU);
  106.        md5GG( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,4,bloque) ,20LU ,3889429448LU);
  107.        md5GG( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,9,bloque) ,5LU ,568446438LU);
  108.        md5GG( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,14,bloque) ,9LU ,3275163606LU);
  109.        md5GG( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,3,bloque) ,14LU ,4107603335LU);
  110.        md5GG( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,8,bloque) ,20LU ,1163531501LU);
  111.        md5GG( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,13,bloque) ,5LU ,2850285829LU);
  112.        md5GG( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,2,bloque) ,9LU ,4243563512LU);
  113.        md5GG( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,7,bloque) ,14LU ,1735328473LU);
  114.        md5GG( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,12,bloque) ,20LU ,2368359562LU);
  115.  
  116.        md5HH( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,5,bloque) ,4LU ,4294588738LU);
  117.        md5HH( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,8,bloque) ,11LU ,2272392833LU);
  118.        md5HH( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,11,bloque) ,16LU ,1839030562LU);
  119.        md5HH( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,14,bloque) ,23LU ,4259657740LU);
  120.        md5HH( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,1,bloque) ,4LU ,2763975236LU);
  121.        md5HH( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,4,bloque) ,11LU ,1272893353LU);
  122.        md5HH( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,7,bloque) ,16LU ,4139469664LU);
  123.        md5HH( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,10,bloque) ,23LU ,3200236656LU);
  124.        md5HH( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,13,bloque) ,4LU ,681279174LU);
  125.        md5HH( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,0,bloque) ,11LU ,3936430074LU);
  126.        md5HH( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,3,bloque) ,16LU ,3572445317LU);
  127.        md5HH( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,6,bloque) ,23LU ,76029189LU);
  128.        md5HH( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,9,bloque) ,4LU ,3654602809LU);
  129.        md5HH( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,12,bloque) ,11LU ,3873151461LU);
  130.        md5HH( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,15,bloque) ,16LU ,530742520LU);
  131.        md5HH( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,2,bloque) ,23LU ,3299628645LU);
  132.  
  133.        md5II( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,0,bloque) ,6LU ,4096336452LU);
  134.        md5II( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,7,bloque) ,10LU ,1126891415LU);
  135.        md5II( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,14,bloque) ,15LU ,2878612391LU);
  136.        md5II( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,5,bloque) ,21LU ,4237533241LU);
  137.        md5II( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,12,bloque) ,6LU ,1700485571LU);
  138.        md5II( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,3,bloque) ,10LU ,2399980690LU);
  139.        md5II( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,10,bloque) ,15LU ,4293915773LU);
  140.        md5II( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,1,bloque) ,21LU ,2240044497LU);
  141.        md5II( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,8,bloque) ,6LU ,1873313359LU);
  142.        md5II( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,15,bloque) ,10LU ,4264355552LU);
  143.        md5II( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,6,bloque) ,15LU ,2734768916LU);
  144.        md5II( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,13,bloque) ,21LU ,1309151649LU);
  145.        md5II( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,4,bloque) ,6LU ,4149444226LU);
  146.        md5II( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,11,bloque) ,10LU ,3174756917LU);
  147.        md5II( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,2,bloque) ,15LU ,718787259LU);
  148.        md5II( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,9,bloque) ,21LU ,3951481745LU);
  149.  
  150.  
  151.        for(i = 0 ; i < 4 ; i++)
  152.            reg[i] += aux_reg[i];
  153.  
  154.        bloque++;
  155.        longitud -= 64; /* descontamos un bloque de 64 bytes, 512 bits */
  156.    }
  157.  
  158.    free(aux);
  159.  
  160.    if(!(aux = (char*) malloc(33 * sizeof(char))))
  161.        return NULL;
  162.  
  163.    aux[0] = '\0';
  164.  
  165.    for(i = 0 ; i < 4 ; i++)
  166.        for(j = 0 ; j < 4 ; j++)
  167.            sprintf(aux,"%s%02X",aux,(unsigned char)((char*)&(reg[i]))[j]);
  168.  
  169.    return aux;
  170. }
  171.  
  172. unsigned long long md5_ajustar_datos(char **datos, unsigned long long len)
  173. {
  174.    unsigned long long new_len;
  175.    char *aux;
  176.    int c = 0;
  177.  
  178.    /* si longitud en bits es mayor que ULL_MAX */
  179.    if(len > ULL_MAX / 8)
  180.        return 0; /* devolvemos falso */
  181.  
  182.    if(64 - (len % 64) > 8)
  183.    {
  184.        if(ULL_MAX - (64 - (len % 64)) >= len)
  185.            new_len = len + (64 - (len % 64));
  186.        else
  187.            return 0;
  188.    }
  189.    else
  190.    {
  191.        if(ULL_MAX - 64 - (64 - (len % 64)) >= len)
  192.            new_len = len + 64 + (64 - (len % 64));
  193.        else
  194.            return 0;
  195.    }
  196.  
  197.    if(!(aux = (char*) realloc(*datos , new_len * sizeof(char))))
  198.        return 0;
  199.  
  200.    (*datos) = aux;
  201.  
  202.    c = 1 << 7;
  203.  
  204.    memset((*datos) + len , c , sizeof(char));
  205.    memset((*datos) + len + 1 , 0 , (new_len - len - 1) * sizeof(char));
  206.  
  207.    /* pasamos la longitud de bytes a bits */
  208.    len *= 8;
  209.  
  210.    memcpy((*datos) + new_len - 8 , &len , 8 * sizeof(char));
  211.  
  212.    return new_len;
  213. }
  214.  
  215. unsigned long md5FF(unsigned long *a,unsigned long b,unsigned long c,unsigned long d,unsigned long m,unsigned long s,unsigned long t)
  216. {
  217.    unsigned long aux;
  218.  
  219.    aux = (*a + md5F(b, c, d) + m + t);
  220.  
  221.    *a = b + ((aux << s) | (aux >> (32 - s)));
  222.  
  223.    return *a;
  224. }
  225.  
  226. unsigned long md5GG(unsigned long *a,unsigned long b,unsigned long c,unsigned long d,unsigned long m,unsigned long s,unsigned long t)
  227. {
  228.    unsigned long aux;
  229.  
  230.    aux = (*a + md5G(b, c, d) + m + t);
  231.  
  232.    *a = b + ((aux << s) | (aux >> (32 - s)));
  233.  
  234.    return *a;
  235. }
  236.  
  237. unsigned long md5HH(unsigned long *a,unsigned long b,unsigned long c,unsigned long d,unsigned long m,unsigned long s,unsigned long t)
  238. {
  239.    unsigned long aux;
  240.  
  241.    aux = (*a + md5H(b, c, d) + m + t);
  242.  
  243.    *a = b + ((aux << s) | (aux >> (32 - s)));
  244.  
  245.    return *a;
  246. }
  247.  
  248. unsigned long md5II(unsigned long *a,unsigned long b,unsigned long c,unsigned long d,unsigned long m,unsigned long s,unsigned long t)
  249. {
  250.    unsigned long aux;
  251.  
  252.    aux = (*a + md5I(b, c, d) + m + t);
  253.  
  254.    *a = b + ((aux << s) | (aux >> (32 - s)));
  255.  
  256.    return *a;
  257. }
  258.  
  259.  
  260. int MD5_bruteforce(string MD5,unsigned long longitud)
  261. {
  262.    static string cadena;
  263.    static unsigned long posicion = 0;
  264.    static char* alfabeto = "abcdefghijklmnopqrstuvwxyz"; //con este alfabeto abarcamos el espacio imagen en menos iteraciones
  265.  
  266.    if(posicion == longitud)
  267.    {
  268.        //si hemos llegado a la ultima posicion almacenamos la variacion
  269.        if(string(md5((char*)cadena.c_str(), cadena.length())) == MD5)
  270.        {
  271.            cout << cadena;
  272.            return 1;
  273.        }
  274.  
  275.        return 0;
  276.    }
  277.  
  278.    //si es la primera llamada damos la longitud deseada a la cadena
  279.    if(posicion == 0)
  280.        cadena.resize(longitud);
  281.  
  282.    //para cada uno de los caracteres del alfabeto
  283.    for(int i = 0 ; alfabeto[i] ; i++)
  284.    {
  285.        cadena[posicion] = alfabeto[i]; //asignamos a la posicion correspondiente el caracter del alfabeto.
  286.  
  287.        //avanzamos una posicion
  288.        posicion++;
  289.  
  290.        //y calculamos el siguiente caracter
  291.        if(MD5_bruteforce(MD5,longitud))
  292.        {
  293.            posicion = 0;
  294.            cadena.resize(0);
  295.            return 1;
  296.        }
  297.  
  298.        //volvemos a la posicion original
  299.        posicion--;
  300.    }
  301.  
  302.    //posicion termina a cero para la siguiente llamada
  303.    if(!posicion)
  304.        cadena.resize(0);
  305.  
  306.    return 0;
  307. }
  308.  
  309. int main(int argc, char *argv[])
  310. {
  311.    string MD5;
  312.  
  313.    if(argc != 2)
  314.    {
  315.        cout << argv[0] << " MD5_hash" << endl;
  316.        return -1;
  317.    }
  318.  
  319.    if(strlen(argv[1]) != 32)
  320.    {
  321.        cout << argv[0] << " MD5_hash" << endl;
  322.        return -1;
  323.    }
  324.  
  325.    for(int i = 0 ; i < 32 ; i++)
  326.    {
  327.        argv[1][i] = toupper(argv[1][i]);
  328.  
  329.        if(!((argv[1][i] >= '0' && argv[1][i] <= '9') || (argv[1][i]>= 'A' && argv[1][i]<='Z')))
  330.        {
  331.            cout << argv[0] << " MD5_hash" << endl;
  332.            return -1;
  333.        }
  334.    }
  335.  
  336.    MD5 = argv[1];
  337.  
  338.  
  339.    if(string(md5("",0)) != MD5)
  340.    {
  341.        for(int i = 1 ; i < 32 ; i++)
  342.            if(MD5_bruteforce(MD5,i))
  343.                break;
  344.    }
  345.    else
  346.        cout <<"Cadena vacia" << endl;
  347.  
  348.    return 0;
  349. }
  350.  
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: RETOS C++
« Respuesta #34 en: 21 Septiembre 2012, 18:17 pm »

8.

El crackeador de MD5. Compilado utilizando g++ funciona (probad con cadenas cortas y con minusculas). Supongo que podria fallar con otros compiladores o versiones de g++ distintas de la que tengo, a fin de cuentas no deja de ser un popurri de unos cuantos codigos que tenia hechos anteriormente. Mi version de g++ considera unsigned long de 32 bits y unsigned long long de 64. Tampoco se si funcionara en todos los casos, lo que si puedo asegurar es que con cadenas cortas y de minusculas funciona...


ya te sume los puntos ya veo que tendre que poner retos mas dificles de momento intenta completar los que quedan que ya requieren mas tiempo
En línea

ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: RETOS C++
« Respuesta #35 en: 21 Septiembre 2012, 19:43 pm »

Hola Stakewinner00.

Citar
ecfisa, en tu codigo falta un include despues lo añado

Los tres códigos que publiqué están probados y funcionan, lo que sí noto que faltan son los 41 puntos... :D

Saludos. :)
En línea

Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: RETOS C++
« Respuesta #36 en: 21 Septiembre 2012, 20:50 pm »

Hola Stakewinner00.

Los tres códigos que publiqué están probados y funcionan, lo que sí noto que faltan son los 41 puntos... :D

Saludos. :)

mira un ejemplo

Código
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main() {
  6.  string texto;
  7.  
  8.  cout << "Texto: ";
  9.  getline(cin, texto);
  10.  cout << "El texto tiene " << texto.length() << " caracteres.";
  11.  cin.get();
  12.  return 0;
  13. }

no entiendo como declaras un string si no lo has incluido, en los otros pasan cossas similares
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: RETOS C++
« Respuesta #37 en: 21 Septiembre 2012, 21:50 pm »

Ya he conseguido que funcione el crackeador:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. #include <crypt.h>
  6.  
  7. int main(int argc, char* argv[])
  8. {
  9.    const char salt[] = "$1$.........";
  10.    char *buf, pass[30], *hash;
  11.    hash = (char*) malloc(30);
  12.    buf = (char*) malloc(30);
  13.    FILE* file = fopen(argv[1], "r");
  14.    printf("Escribe el hash: ");
  15.    fgets(pass, 30, stdin);
  16.    while(!feof(file))
  17.    {
  18.     fgets(buf, 30, file);
  19.     hash = crypt(buf, salt);
  20.     if(!strcmp(pass, hash)) break;
  21.    }
  22.    printf("Password: %s", buf);
  23.    fclose(file);
  24.    getchar();
  25.    return 0;
  26. }
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: RETOS C++
« Respuesta #38 en: 22 Septiembre 2012, 01:33 am »

Citar
no entiendo como declaras un string si no lo has incluido, en los otros pasan cossas similares
Hola Stakewinner00.

En Builder C++ 6 funciona perfectamente tál y como lo he publicado, por otro lado las inclusiones de librerías no hacen a la esencia del algorítmo.

Tampoco tomes en serio el comentario que hice sobre los puntos, entendí los desafios como una diversion y bajo ningún motivo esperaba recompensa alguna.

Saludos. :)

EI: juntando mensajes.

Hola Stakewinner00.

Me quedé con la duda de que fuera una característica del compilador de Borland y tuviera incompatibilidad con otros, por lo que descargué Code::Blocks (GNU GCC Compiler) y probé los códigos que mencionas:
1)
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main(int argc, char* argv[]) {
  6.  char frase[100];
  7.  int i=0;
  8.  const char *num[10] = {"cero","uno","dos","tres","cuatro","cinco",
  9.                         "seis","siete","ocho","nueve" };
  10.  cout << "Frase: ";
  11.  cin >> frase;
  12.  
  13.  while (frase[i]) {
  14.    if (isdigit(frase[i]))
  15.      cout << num[frase[i]-48] << " ";
  16.    i++;
  17.  }
  18.  
  19.  while(cin.get()!='\n');
  20.  cin.get();
  21.  return 0;
  22. }
  23.  

2)
Código
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main() {
  6.  string texto;
  7.  
  8.  cout << "Texto: ";
  9.  getline(cin, texto);
  10.  cout << "El texto tiene " << texto.length() << " caracteres.";
  11.  cin.get();
  12.  return 0;
  13. }
  14.  

3)
Código
  1. #include <iostream>
  2. #define MAX_PALABRAS 4
  3.  
  4. using namespace std;
  5. int main() {
  6.  string vec[MAX_PALABRAS], min;
  7.  
  8.  cout << "Ingrese " << MAX_PALABRAS << " palabras" << endl;
  9.  cout << "-----------------" << endl;
  10.  
  11.  min.assign(255,255);
  12.  for(int i = 0; i < MAX_PALABRAS; i++) {
  13.    cout << "Palabra " << i+1 << " :";
  14.    cin >> vec[i];
  15.    if (vec[i] < min)
  16.      min = vec[i];
  17.  }
  18.  cout << endl << "Primer palabra por orden alfabetico: " << min;
  19.  
  20.  while(cin.get()!='\n');
  21.  cin.get();
  22.  return 0;
  23. }
  24.  

Los tres se compilan y ejecuntan sin problemas...

¿ Con que compilador tuviste problemas ?

Saludos.
« Última modificación: 2 Octubre 2012, 14:27 pm por Eternal Idol 7D » En línea

Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: RETOS C++
« Respuesta #39 en: 22 Septiembre 2012, 09:03 am »

g++ desde cmd pero da igual igualmente te sumo los puntos pero para codigos posteriores es mejor que el código sea compatible con todos los compiladores.

En el reto 2 le faltaba el #include <string> y estaba esperando que lo pusieras tu pero da igual y en el 3 lo mismo pero aparte me sale estoo

Código:
C:/mingw/bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../../include/g++-3/std/bastr
ing.h: In method `class basic_string<char,string_char_traits<char>,__default_all
oc_template<false,0> > & basic_string<char,string_char_traits<char>,__default_al
loc_template<false,0> >::replace<int>(char *, char *, int, int)':
C:/mingw/bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../../include/g++-3/std/bastr
ing.h:229:   instantiated from here
C:/mingw/bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../../include/g++-3/std/bastr
ing.h:453: invalid type argument of `unary *'
C:/mingw/bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../../include/g++-3/std/bastr
ing.h:229:   instantiated from here
C:/mingw/bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../../include/g++-3/std/bastr
ing.h:460: invalid type argument of `unary *'
« Última modificación: 22 Septiembre 2012, 09:07 am por Stakewinner00 » En línea

Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[RECOPILACION DE RETOS] VBClassic Por 79137913
Programación Visual Basic
79137913 5 14,102 Último mensaje 21 Enero 2013, 18:58 pm
por 79137913
Zona de retos Scripting « 1 2 3 »
Scripting
Eleкtro 23 54,120 Último mensaje 20 Enero 2014, 19:16 pm
por Eleкtro
Retos de java « 1 2 »
Java
4dr14n31t0r 10 5,242 Último mensaje 22 Enero 2016, 16:06 pm
por 0xFer
Retos forenses en español?
Dudas Generales
Sapote 0 1,916 Último mensaje 22 Mayo 2017, 02:58 am
por Sapote
Retos(1 - 15) (wardGame) « 1 2 »
Desafíos - Wargames
4A45414E 14 7,191 Último mensaje 10 Noviembre 2018, 03:16 am
por zonahurbana
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines