Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Problemas con la función explode(); (https://www.clubdelphi.com/foros/showthread.php?t=84570)

georkis 05-11-2013 19:45:22

Problemas con la función explode();
 
Bueno, estoy haciendo una script que crea usuario en el fichero .htpasswd, para encryptar contraseña... ya logré que abra el fichero y me lee el contenido del fichero, ahora lo que quiero es que haga una lista con los usuarios solamente hasta el delimitador ":", porque apartir de los dos punto es que comienza la contraseña... esta script cuando pongo la array $list[0]; me pone el usuario, pero cuando le pongo $list[$i], me pone la contraseña... este es el código...

Código PHP:

<?php
$passwd 
="hunter"//poner $_POST['usuario']
$user="koko.santiesteban"// poner $_POST['passwd']

    
$salt substr(str_shuffle("abcdefghijklmnopqrstuvwxyz0123456789"), 08);
    
$len strlen($passwd);
    
$text $passwd.'$apr1$'.$salt;
    
$bin pack("H32"md5($passwd.$salt.$passwd));
    for(
$i $len$i 0$i -= 16) { $text .= substr($bin0min(16$i)); }
    for(
$i $len$i 0$i >>= 1) { $text .= ($i 1) ? chr(0) : $passwd{0}; }
    
$bin pack("H32"md5($text));
    for(
$i 0$i 1000$i++) {
        
$new = ($i 1) ? $passwd $bin;
        if (
$i 3$new .= $salt;
        if (
$i 7$new .= $passwd;
        
$new .= ($i 1) ? $bin $passwd;
        
$bin pack("H32"md5($new));
    }
    for (
$i 0$i 5$i++) {
        
$k $i 6;
        
$j $i 12;
        if (
$j == 16$j 5;
        @
$tmp $bin[$i].$bin[$k].$bin[$j].$tmp;
    }
    
$tmp chr(0).chr(0).$bin[11].$tmp;
    
$tmp strtr(strrev(substr(base64_encode($tmp), 2)),
    
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
    
"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
   
$path="user";
//Encripto la contraseña conMD5
//Defino la cadena a insertar en el archivo
$cadena=$user.":"."$"."apr1"."$".$salt."$".$tmp."\r\n";
//Inserto un nuevo registro
//Abro el fichero htpasswd
$Anadir=fopen($path"a");
$lines=count(explode("\n"file_get_contents($path))); //cuenta las lineas del fichero para 
#Escribimos la cadena dentro de el
$delimitador ":";
fputs($Anadir$cadena);
#$list = explode($delimitador,$contenido);
for ($i=0$i<$lines$i++){
$list=explode($delimitadorfile_get_contents('user'));

echo 
$list[$i]. "<br>";

}
#Cerramos el fichero
fclose($Anadir);


?>

Bueno, espero que me ayuden... la script le falta... validación si el usuario existe... modificar y eliminar... pero estoy trabajando en eso...

Ñuño Martínez 05-11-2013 20:06:54

Leyendo tu código creo que no has comprendido qué es lo que hace la función explode. De lo contrario, entenderías por qué está mal el último bucle y otras partes.

Tampoco es recomendable acceder a un archivo mientras está abierto (lo haces cuando cuentas las líneas).

También te recomiendo que uses funciones para ordenar tu código, porque es bastante lioso. En varias ocasiones mezclas comandos que forman parte de un proceso con otro que se hace a continuación. No afecta al funcionamiento, pero hace difícil el entenderlo.

Finalmente, no uses md5 ya que es relativamente fácil encontrar colisiones (ataques rainbow). Este artículo que escribí no hace mucho te ayudará bastante, así como el artículo que enlazo en el mismo.

georkis 07-11-2013 01:29:39

Sobre el bucle...
 
OK, a la verdad ya hace unos 2 años que no programo nada, se me ha olvidado algunas funciones principalmente el manejo de tipo string... solo lo más básico me acuerdo por eso estoy pidiendo ayuda... sobre la encrytación... no se mucho de eso... observe como encrypta el htpasswd y vi algunos ejemplo en Internet... pero fijate, en el código hay dos variables fundamentales en la encrytación que la hace más segura $salt y la encryta a md5... de todos modos trataré de hacerlo de otros modo... muchas gracias...


La franja horaria es GMT +2. Ahora son las 00:02:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi