Retroceder   Foros del Web > Programación para sitios web > PHP

Respuesta
 
Herramientas Desplegado
Antiguo 04-nov-2004, 02:10   #1 (permalink)
Faser ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2002
Mensajes: 110
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.
Faser está desconectado   Responder Citando
Antiguo 04-nov-2004, 05:33   #2 (permalink)
Moderador
Cluster llegará a ser famoso muy prontoCluster llegará a ser famoso muy pronto
 
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago - Chile
Mensajes: 34.437
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-nov-2004 a las 05:36.
Cluster está desconectado   Responder Citando
Antiguo 04-nov-2004, 06:42   #3 (permalink)
Faser ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2002
Mensajes: 110
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
Faser está desconectado   Responder Citando
Antiguo 04-nov-2004, 09:42   #4 (permalink)
Moderador
Cluster llegará a ser famoso muy prontoCluster llegará a ser famoso muy pronto
 
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago - Chile
Mensajes: 34.437
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,
Cluster está desconectado   Responder Citando
Antiguo 04-nov-2004, 15:39   #5 (permalink)
Faser ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2002
Mensajes: 110
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.
Faser está desconectado   Responder Citando
Antiguo 04-nov-2004, 20:13   #6 (permalink)
Moderador PHP
jpinedo ha deshabilitado el karma
 
Avatar de jpinedo
 
Fecha de Ingreso: septiembre-2003
Ubicación: Piura
Mensajes: 2.740
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-nov-2004 a las 20:21.
jpinedo está desconectado   Responder Citando
Antiguo 06-nov-2004, 05:56   #7 (permalink)
Faser ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2002
Mensajes: 110
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);

}

?>
Faser está desconectado   Responder Citando
Antiguo 06-nov-2004, 14:25   #8 (permalink)
Moderador
Cluster llegará a ser famoso muy prontoCluster llegará a ser famoso muy pronto
 
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago - Chile
Mensajes: 34.437
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,
Cluster está desconectado   Responder Citando
Antiguo 07-nov-2004, 20:39   #9 (permalink)
Moderador PHP
jpinedo ha deshabilitado el karma
 
Avatar de jpinedo
 
Fecha de Ingreso: septiembre-2003
Ubicación: Piura
Mensajes: 2.740
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
jpinedo está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 01:21.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93