Hacer un 100 millones de Insert sin que se me pare.

Iniciado por dimitrix, 14 Marzo 2011, 01:21 AM

0 Miembros y 1 Visitante están viendo este tema.

dimitrix

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 (php) [Seleccionar]
<?php

$db_host
="localhost";
$db_name="colision";
$db_user="colisionn";
$db_user_pass="blablabla";


$con mysql_connect($db_host,$db_user,$db_user_pass);
if (!
$con)
  {
  die(
'Could not connect: ' mysql_error());
  }

mysql_select_db($db_name$con);


$contador=1;

while(
$contador!=9999999){

$md5=md5($contador);
$sha1=sha1($contador);


mysql_query("INSERT INTO NUM1 (NUM, MD5, SHA1)
VALUES ('
$contador', '$md5', '$sha1')");

$contador++;
}; 

mysql_close($con);


?>


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?




bomba1990

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.
"Cuando le di de comer a los pobres me llamaron santo, pero cuando pregunte porque los pobres eran pobres me dijeron comunista"

http://sosinformatico.blogspot.com/
http://www.publisnet.com.ve

Shell Root

Quizás pueda mejorar si realizar el Cifrado de los datos desde el motor de base de datos, es decir:
Código (php) [Seleccionar]
for( $i=0; $i<=9999999; $i++ ){
  $sSQL = "INSERT INTO NUM1 (NUM, MD5, SHA1) VALUES ('".$i."', 'MD5(".$i.")', 'SHA1(".$i.")');";
}
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Castg!

Insertarla 100 millones de veces sin que se te pare? Entonces vos necesitas VIAGRA.

set_time_limit();

RedZer

Cita de: Castg! en 14 Marzo 2011, 03:11 AM
Insertarla 100 millones de veces sin que se te pare? Entonces vos necesitas VIAGRA.


jajajajajajaja o M- force
Nacido y criado entre gente que enseño a pensar antes de creer a ciegas, Todo me causa curiosidad en el mundo

Stoya

Cita de: 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 (php) [Seleccionar]
for( $i=0; $i<=9999999; $i++ ){
  $sSQL = "INSERT INTO NUM1 (NUM, MD5, SHA1) VALUES ('".$i."', 'MD5(".$i.")', 'SHA1(".$i.")');";
}


¿No se puede hacer esto en php?

Código (php) [Seleccionar]
for( $i=0; $i<=9999999; $i++ ){
  $sSQL = "INSERT INTO NUM1 (NUM, MD5, SHA1) VALUES ('$i', 'MD5($i)', 'SHA1($i)');";
}


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 (php) [Seleccionar]
$contador=1; por
Código (php) [Seleccionar]
$contador=mysql_fetch_row(mysql_query("SELECT max(num) FROM num1;"))[0];

WHK

Cita de: 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 (php) [Seleccionar]
for( $i=0; $i<=9999999; $i++ ){
  $sSQL = "INSERT INTO NUM1 (NUM, MD5, SHA1) VALUES ('".$i."', 'MD5(".$i.")', 'SHA1(".$i.")');";
}


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&

programatrix

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