Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: dato000 en 5 Julio 2013, 05:10 am



Título: Como puedo determinar el tamaño de un diccionario creado en C++??
Publicado por: dato000 en 5 Julio 2013, 05:10 am
Bueno, no me quiero extender mucho, solo quiero crear un diccionario con un rango de numeros de 10 cifras desde el 1.000.000.000 hasta el 9.999.999.999, y me surgio la duda, cuanto podria pesar tal archivo, como puedo determinar el tamaño de ese diccionario, quedara taaaaan pesado como creo??

además, puedo generarlo de una vez con extension .lst o es necesario hacer alguna conversion?

Como lo imprimirian uds?? con arreglos, vectores o listas??


Título: Re: Como puedo determinar el tamaño de un diccionario creado en C++??
Publicado por: eferion en 5 Julio 2013, 08:05 am
Pues depende.

Si lo almacenas en memoria necesitas 64 bits por cada número, cógete el tamaño medio y máximo ( o aproximado si eres capaz de calcularlo ) y multiplica ese numero por 8 para calcular los requisitos de memoria.

Si lo almacenas en un archivo de texto tienes dos posibles escenarios:

* Se almacena como un archivo binario, los requisitos de espacio son los mismos que los calculados antes, 8 bytes por número.

* Se almacena como archivo formateado ( XML, INI, TXT legible, ... ) Depende del formato elegido, pero como norma general será siempre superior a ( 10 + 1 ) * cifras_en_el_diccionario. El 10 sale del número de cifras que tiene el archivo de texto y el suponiendo un carácter de separación ( lo normal es que acabe siendo más de uno )


Título: Re: Como puedo determinar el tamaño de un diccionario creado en C++??
Publicado por: dato000 en 5 Julio 2013, 14:48 pm
entonces seria como por cada numero se ocupan 8 bytes???

seria de 1.000.000.000 a 9.999.999.999 = 8.999.999.999 numeros * * bytes = 71.999.999.992 bytes?? es correcto??

de eso serian  ->   71.999.999.992 bytes * 1 KB / 1024 bytes   =   70312499.9921875 KB

y de eso serian  ->   70312499.9921875 * 1 MB / 1024 KB   =   68664.550773621 MB

y finalmente  ->  68664.550773621 MB * 1 MB / 1024 GB   =   67.055 GB

serian 67 GB aprox?? es correcto??? necesitaria que me confirmaran ese dato para preaparar el espacio, no me quiero arriesgar a que se llene el disco como porque si, para que al final todo el esfuerzo sea en vano y no alcance y crashee el programa


Título: Re: Como puedo determinar el tamaño de un diccionario creado en C++??
Publicado por: 0xDani en 5 Julio 2013, 16:38 pm
Y necesitas almacenar esos números en un archivo? No te sale mejor generarlos al vuelo?


Título: Re: Como puedo determinar el tamaño de un diccionario creado en C++??
Publicado por: dato000 en 5 Julio 2013, 18:58 pm
Y necesitas almacenar esos números en un archivo? No te sale mejor generarlos al vuelo?

Pero entonces como puedo generar ese rango para que se use en un programa para que compare con seguridad WPA???


Título: Re: Como puedo determinar el tamaño de un diccionario creado en C++??
Publicado por: eferion en 8 Julio 2013, 08:52 am
Hombre, generar ese rango lo puedes hacer con un for

Código
  1. unsigned long long numero;
  2. for ( numero=1000000000; numero<=9999999999; ++numero )
  3. {
  4. ...
  5. }

Lo que no se yo es la viabilidad de probar por fuerza bruta ese rango de claves...

suponiendo que pudieses probar 1000 claves por segundo probar todo el rango te llevaría: 2450 horas... 104 días