Foros del Web » Programando para Internet » PHP »

Generar muchos passwords

Estas en el tema de Generar muchos passwords en el foro de PHP en Foros del Web. Hola a todos, necesito un script que me pueda generar 300 passwords de golpe. Tengo el script de Cluster que dejó en las Faq's, pero ...
  #1 (permalink)  
Antiguo 04/11/2004, 03:10
 
Fecha de Ingreso: noviembre-2002
Mensajes: 130
Antigüedad: 22 años
Puntos: 0
Generar muchos passwords

Hola a todos,
necesito un script que me pueda generar 300 passwords de golpe.
Tengo el script de Cluster que dejó en las Faq's, pero ahora necesito paginar de golpe 300 passwords. El nick ya lo tengo, me lo pasó el cliente. Solo debo añadir un password a cada nick.

Es posible?

Gracias por adelantado.
  #2 (permalink)  
Antiguo 04/11/2004, 06:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Pues .. si te fijas .. el script de las FAQ's es una función ...

No sé de donde obtendrás tus "nicks" .. pero imaginemos que de alguna forma los lees de una BD por ejemplo ...

Código PHP:
// etc ...
$resultado=mysql_query("SELECT nick FROM usuarios");
while (
$row=mysql_fetch_array($resultado)){
       
$password=genera_password(); // no me acuerdo del nombre de la función ahora ...
        
$sql="UPDATE usuarios SET password='$password' WHERE nick='".$row['nick']."'";
        
mysql_query($sql);

Un saludo,

Última edición por Cluster; 04/11/2004 a las 06:36
  #3 (permalink)  
Antiguo 04/11/2004, 07:42
 
Fecha de Ingreso: noviembre-2002
Mensajes: 130
Antigüedad: 22 años
Puntos: 0
Gracias Cluster, me ha servido. De echo es lo que estaba buscando, aunque debo pedirte otro favor.

el codigo es el siguiente:

<?php
require('configuracion.php');

function genera_password($longitud,$tipo="alfanumerico"){

if ($tipo=="alfanumerico"){
$exp_reg="[^A-Z0-9]";
} elseif ($tipo=="numerico"){
$exp_reg="[^0-9]";
}

return substr(eregi_replace($exp_reg, "", md5(time())) .
eregi_replace($exp_reg, "", md5(time())) .
eregi_replace($exp_reg, "", md5(time())),
0, $longitud);
}

$resultado=mysql_query("SELECT nick FROM usuarios");
while ($row=mysql_fetch_array($resultado)){
$password=genera_password(8);
$sql="UPDATE usuarios SET password='$password' WHERE nick='".$row['nick']."'";
mysql_query($sql);
}

?>

Hasta aquí bien, aunque lo que sucede ahora es que me escribe el mismo password para todos igual.

Como se haria para que cada usuario tenga su password.

Gracias
  #4 (permalink)  
Antiguo 04/11/2004, 10:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
En principio . . esa función al ejecutarla genera un password aleatorio ..(al llamarla como lo haces en tu bucle) ..

Haz un echo a tu $password antes de tu UPDATE para ver si hay problemas con tu consulta SQL o es de la función que no sea tan "aleatória".

Un saludo,
  #5 (permalink)  
Antiguo 04/11/2004, 16:39
 
Fecha de Ingreso: noviembre-2002
Mensajes: 130
Antigüedad: 22 años
Puntos: 0
No acabo de entender....
al excribir el echo me sale lo siguiente como es lógico
Password: af0d1c26
Password: af0d1c26
Password: af0d1c26
.
.
.etc.. hasta 300 passwords

y claro a mi me interesaria que fuera así

Password: af0d1c26
Password: 8a8da135
Password: 8rh98cc1

y posteriormente me hiciera el UPDATE.
  #6 (permalink)  
Antiguo 04/11/2004, 21:13
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 21 años, 1 mes
Puntos: 41
Cita:
Iniciado por Cluster
Haz un echo a tu $password antes de tu UPDATE para ver si hay problemas con tu consulta SQL o es de la función que no sea tan "aleatória".
Pues parece que no es tan aleatoria... porque la semilla de generación aleatoria la toma de time()...
time() devuelve la hora actual (en TimeStamp...) con una precisión de segundos. Si el script se ejecuta en menos de un segundo.... todos tendrán el mismo password. Y si se ejecuta en más de un segundo.. habrá bloques enteros de usuarios con passwords iguales por cada segundo de ejecución.
O sea que en este caso sí es recomendable utilizar una función como rand() en lugar o junto con el time() dentro de la función genera_password().

Podría ponerse por ejemplo:
md5(time()+rand())
o simplemente:
md5(rand())

saludos
PD: ojo que para utilizar la función rand() así directamente se necesita una versión de PHP >= 4.2.0. En versiones menores habrá que inicializar la semilla del generador de números aleatorios. (ver manual http://www.php.net/rand)

Última edición por jpinedo; 04/11/2004 a las 21:21
  #7 (permalink)  
Antiguo 06/11/2004, 06:56
 
Fecha de Ingreso: noviembre-2002
Mensajes: 130
Antigüedad: 22 años
Puntos: 0
Perfecto, es justo lo que quería. Gracias por la aclaración jpinedo.

Por si a alguien le interesa les dejo aquí el codigo:
<?
require('configuracion.php');

function genera_password($longitud,$tipo="alfanumerico"){

if ($tipo=="alfanumerico"){
$exp_reg="[^A-Z0-9]";
} elseif ($tipo=="numerico"){
$exp_reg="[^0-9]";
}

return substr(eregi_replace($exp_reg, "", md5(rand())) .
eregi_replace($exp_reg, "", md5(rand())) .
eregi_replace($exp_reg, "", md5(rand())),
0, $longitud);
}

$resultado=mysql_query("SELECT nick FROM usuarios");
while ($row=mysql_fetch_array($resultado)){
$password=genera_password(8);
$sql="UPDATE usuarios SET password='$password' WHERE nick='".$row['nick']."'";
mysql_query($sql);

}

?>
  #8 (permalink)  
Antiguo 06/11/2004, 15:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
jpinedo

Te adelantastes .. ahora que lo vì es cierto.. la ejecuciòn del script se hace pràcticamente en el mismo segundo asì que el password no cambiará. La solución que propones es buena .. yo estaba pensando en usar en lugar de time() .. microtime().

Voy a modificar la FAQ en cuestiòn con los crèditos correspondientes Jpinedo.

Un saludo,
  #9 (permalink)  
Antiguo 07/11/2004, 21:39
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 21 años, 1 mes
Puntos: 41
Ok Cluster...
No es necesario lo de los créditos... no era tan difícil darse cuenta después de la información brindada por Faser.
Yo he utilizado ese script como base para generar contraseñas varias veces y nunca se me ocurrió que podía tener esa limitación... hasta ahora que a alguien le pasó.

saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:32.