Banalny skrypt logowania (TXTFILE) - za długie hasło...

0

Witam. Mam niecodzienny problem, mianowicie zrobilem banalny skrypt logowania i panel administracyjny strony - problem polega na tym że gdy nic nie grzebałem prze haśle było OK, jednak stwierdziłem że wypadało by je zaszyfrować poprzez MD5. Po zaszyfrowaniu skrypt nie radzi sobie z poprawnym odczytaniem danych z pliku admina.

Plik z kontem admina wygląda tak:
hasło|admin level|nick
I nazwa to nick.admin

Wygląda to tak:

//log.php - tu dochodzą dane z formularza
 
 <?
 session_start();
 include('ip.php');
 if(isset($_POST['zaloguj'])) 
   { 
   $nazwakonta=$_POST['user'];
   $haselko=$_POST['pass'];
   $plik = "konta/$nazwakonta.adm"; 
$test = file_exists($plik); 
     if (!$test) 
     { 
        
         $ipadmina=$_SERVER['REMOTE_ADDR'];
         $today1 = date("Y-m-d  h:m");
        $tekst1 = "$user ($ipadmina) nie zalogowal sie do panelu ($today)<BR>";
        $file1 = "logowanieerror.log";
        $fp1 = fopen($file1, "a");
        flock($fp1, 2);
        fwrite($fp1, $tekst1);
        flock($fp1, 3);
        fclose($fp1);
                header('Location: ../error.php?e=10');
     }
     else
     {
         $plik = fopen("konta/$nazwakonta.adm", "r");
 if ($plik === false) {
 
 $ipadmina=$_SERVER['REMOTE_ADDR'];
         $today2 = date("Y-m-d  h:m");
        $tekst2 = "$user ($ipadmina) nie zalogowal sie do panelu ($today)<BR>";
        $file2 = "logowanieerror.log";
        $fp2 = fopen($file2, "a");
        flock($fp2, 2);
        fwrite($fp2, $tekst2);
        flock($fp2, 3);
        fclose($fp2);
                header('Location: ../error.php?e=10');// Wyświetla "Error" kiedy nie odnajdzie pliku
 } else {
 while (!feof($plik)) {
 $bufor = fgets($plik);
 }
 fclose($plik);
 }
 $admininfo = explode("|",$bufor);
 $pass = $admininfo[0];
 $adminlevel = $admininfo[1];
 $user = $admininfo[2];
$passmd5 = md5($haselko);
      if($nazwakonta == $user && $passmd5 == $pass )    
      { 
         $_SESSION['login'] = $user ; 
                 $ipadmina=$_SERVER['REMOTE_ADDR'];
         $today3 = date("Y-m-d  h:m");
        $tekst3 = "$user ($ipadmina) zalogowal sie do panelu ($today)<BR>";
        $file3 = "logowanie.log";
        $fp3 = fopen($file3, "a");
        flock($fp3, 2);
        fwrite($fp3, $tekst3);
        flock($fp3, 3);
        fclose($fp3);
 
                header("Location: admin.php");
                 
      }else{ 
 
 
 header("Location: ../error.php?e=10");
  $ipadmina=$_SERVER['REMOTE_ADDR'];
        $today4= date("Y-m-d h:m");
        $tekst4 = "$user ($ipadmina) nie zalogowal sie do panelu ($today)<BR>";
        $file4 = "logowanieerror.log";
        $fp4 = fopen($file4, "a");
        flock($fp4, 2);
        fwrite($fp4, $tekst4);
        flock($fp4, 3);
        fclose($fp4);
      } 
   }
   }
   ?>
//administrator.php - podczas logowania wyciąga dane z pliku o administratorze
 <?
session_start();
$login = $_SESSION['login'];
$fp = fopen("konta/$login.admin", "r");
$info = fread($fp, 10);
$informacje = explode("|",$info);
$admlvl = $informacje[1];
if($admlvl==1){
$status = '<font color="green"><b>Moderator</font></b>';
}
if($admlvl==2){
$status = '<font color="orange"><b>Administrator</font></b>';
}
if($admlvl==3){
$status = '<font color="red"><b>Head Administrator</font></b>';
}
 ?>
//Tworzenie nowego użytkownika
 
$nick = $_POST['nick'];
$lvl = $_POST['lvl'];
$hass = $_POST['haslo'];
$haslo = md5($hass);
$tekst = "$haslo|$lvl|$nick";
$file = "kontaadministratorow/$nick.admin"; 
$f = fopen($file, "a"); 
flock($f, 2); 
fwrite($f, $tekst); 
flock($f, 3); 
fclose($f); 
echo"<b>Dodano administratora</b><br><br>
Login: <b>$nick</b><br>
Admin Level: <b>$lvl</b><br>
Haslo: <b>$hass</b><br>";

Ma ktoś jakieś pomysły ? Już naprawde nie mam pomysłów co jest nie tak.

A, i wyświetlam to w ten sposób:

<h2>Panel Administracyjny</h2>
	<?
include('administrator.php');
	echo'Zalogowany jako: <b> '.$login.'</b><br>Funkcja: '.$status.' (AdmLvl:'.$admlvl.')<Br><a href="logout.php"><b>Wyloguj</b></a><Br><br>'; 

Gdy działało poprawnie wyświetlało to tak:

Zalogowany jako: nastalski
Funkcja: Head Administrator (AdmLvl: 3)

Teraz wyświetla to tak

Zalogowany jako: nastalski
Funkcja: (AdmLvl:)

0

Nigdy MD5! To nie służy do hashowania haseł, tylko ewentualnie wiadomości (patrz rozwinięcie skrótu MD5). Algorytm jest strasznie kolizyjny i hash można z powrotem zamienić w hasło niewielkim nakładem czasu i zasobów. W zależności od wielkości projektu użyj SHA-1 lub SHA-512.

0

przy sha1 dzieje się to samo... ale dzięki za rade z tym md5. Jestem bardzo początkujący w php i cenie sobie takie porady ;)

//edit
dałem sobie rade, dzięki !

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.