Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: dimitrix en 14 Marzo 2011, 01:21 am



Título: Hacer un 100 millones de Insert sin que se me pare.
Publicado por: dimitrix en 14 Marzo 2011, 01:21 am
Buenas, estoy haciendo unas pruebas para un artículo que estoy haciendo de colisión hash en MD5 y SHA1.

Y estaba haciendo una prueba para hacer y guardar en una base de datos para guardar los 100 primeros millones y:

Código
  1. <?php
  2.  
  3. $db_host="localhost";
  4. $db_name="colision";
  5. $db_user="colisionn";
  6. $db_user_pass="blablabla";
  7.  
  8.  
  9. $con = mysql_connect($db_host,$db_user,$db_user_pass);
  10. if (!$con)
  11.  {
  12.  die('Could not connect: ' . mysql_error());
  13.  }
  14.  
  15. mysql_select_db($db_name, $con);
  16.  
  17.  
  18. $contador=1;
  19.  
  20. while($contador!=9999999){
  21.  
  22. $md5=md5($contador);
  23. $sha1=sha1($contador);
  24.  
  25.  
  26. mysql_query("INSERT INTO NUM1 (NUM, MD5, SHA1)
  27. VALUES ('$contador', '$md5', '$sha1')");
  28.  
  29. $contador++;
  30. };
  31.  
  32.  
  33.  
  34. ?>

Y el PHP se me para cuando lleva poco más de 1 millón. Supongo que es por que tendrá un tiempo máximo para devolver una respuesta al usuario que espera en el navegadorn, pero no se me ocurre nada.

¿Alguna idea?


Título: Re: Hacer un 100 millones de Insert sin que se me pare.
Publicado por: bomba1990 en 14 Marzo 2011, 02:27 am
max time executon. hay una configuracion del php.ini que establece un tiempo maximo de ejecucion. puedes modificarlo y multiplicarlo por 10, aver si haci termina la ejecucion, yo tambien hice un script hace un tiempo que cuando llegaba al tiempo maximo de ejecucion se paraba y espera que el usuario le de click y redireccione a la misma pagina para seguir donde la dejo.


Título: Re: Hacer un 100 millones de Insert sin que se me pare.
Publicado por: Shell Root en 14 Marzo 2011, 02:32 am
Quizás pueda mejorar si realizar el Cifrado de los datos desde el motor de base de datos, es decir:
Código
  1. for( $i=0; $i<=9999999; $i++ ){
  2.  $sSQL = "INSERT INTO NUM1 (NUM, MD5, SHA1) VALUES ('".$i."', 'MD5(".$i.")', 'SHA1(".$i.")');";
  3. }


Título: Re: Hacer un 100 millones de Insert sin que se me pare.
Publicado por: Castg! en 14 Marzo 2011, 03:11 am
Insertarla 100 millones de veces sin que se te pare? Entonces vos necesitas VIAGRA.

set_time_limit(); (http://php.net/manual/es/function.set-time-limit.php)


Título: Re: Hacer un 100 millones de Insert sin que se me pare.
Publicado por: RedZer en 14 Marzo 2011, 07:13 am
Insertarla 100 millones de veces sin que se te pare? Entonces vos necesitas VIAGRA.


jajajajajajaja o M- force


Título: Re: Hacer un 100 millones de Insert sin que se me pare.
Publicado por: Stoya en 19 Marzo 2011, 12:40 pm
Quizás pueda mejorar si realizar el Cifrado de los datos desde el motor de base de datos, es decir:
Código
  1. for( $i=0; $i<=9999999; $i++ ){
  2.  $sSQL = "INSERT INTO NUM1 (NUM, MD5, SHA1) VALUES ('".$i."', 'MD5(".$i.")', 'SHA1(".$i.")');";
  3. }


¿No se puede hacer esto en php?

Código
  1. for( $i=0; $i<=9999999; $i++ ){
  2.  $sSQL = "INSERT INTO NUM1 (NUM, MD5, SHA1) VALUES ('$i', 'MD5($i)', 'SHA1($i)');";
  3. }

Si hasta un millón llega, considerando que es probable que uses un lenguaje tan defectuoso como php porque lo estés ejecutando en un hosting, que en el hosting no tengas permiso para hacer lo de set_time_limit(); (usará modo seguro) ni para cambiar php.ini, que estará fuera de tu jaula, lo que puedes hacer es hacerlo de varias veces.

Lo único que tienes que hacer es cambiar:
Código
  1. $contador=1;
por
Código
  1. $contador=mysql_fetch_row(mysql_query("SELECT max(num) FROM num1;"))[0];


Título: Re: Hacer un 100 millones de Insert sin que se me pare.
Publicado por: WHK en 22 Marzo 2011, 00:09 am
Quizás pueda mejorar si realizar el Cifrado de los datos desde el motor de base de datos, es decir:
Código
  1. for( $i=0; $i<=9999999; $i++ ){
  2.  $sSQL = "INSERT INTO NUM1 (NUM, MD5, SHA1) VALUES ('".$i."', 'MD5(".$i.")', 'SHA1(".$i.")');";
  3. }


mysql no soporta concaenaciones para multiples inserts con ";", eso se utiliza en phpmyadmin porque phpmyadmin separa las querys y las hace múltiples ejecutando una por una, pero en la práctica eso no existe, solo lo puede hacer mssql (vivan las inyecciones multiples).

intenta hacer lo que te dicen con set_time_limit(); y si quieres dejarlo en background ejecutalo desde php directamente con system() y lo pasas por >dev/null&


Título: Re: Hacer un 100 millones de Insert sin que se me pare.
Publicado por: programatrix en 22 Marzo 2011, 00:48 am
Función sleep, deja descansar la maquinaria unos segundo y sigue al rato:
Sleep(5);

Por ejemplo, y si no por pasos, si tienes 1000000000 numeros a hacer md5 pues divides ese número de dos, hasta que te quede un número más normal digamos 5000, luego cojes y sumas todas las divisiones que has hecho de ese número, guardas en un fichero el número de pasos a seguir, entonces, empiezas, tufichero.php?paso=0 te muestra una web donde poniendo en la cabecera una redirección te redirecciones en 5 segundos por ejemplo a tufichero.php?paso=1
Así tu ordeador desde el navegador va llamando automáicamente a crear nuevos hash md5, tu servidor no se satura y va poco a poco, si, vas a tardar más tiempo, pero no se saturará el servidor...
Pero al igual que lo haces con números puedes coger un fichero diccionario y crearte un programa en php que valla abriendole poniendo el hash md5 en otro fichero y luego para crackear un password en md5 simplemente comparas rapidamente jaja
No se hay muchas posibilidades interesantes :)
Un Saludo