Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> md5 i sha1 dają różne wyniki
Apo
post
Post #1





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

Ostrzeżenie: (0%)
-----


Witam
Pisze bota w php do kanałów irc. Chciałem dodać taką funkcję że:
admin bota dodaje op'ów do pliku tekstowego (nick, hasło). Następnie jeśli wejdzie user na kanal to moze sie zalogowac (jesli jego nick istnieje w pliku i haslo sie zgadza) i uzyskac dostep do komend bota. Zrobilem hashowanie hasel md5(sha1(...)), ale nie wiem co sie dzieje że hasła za każdym razem mają inna postać i w efekcie nie mozna się zalogować. Sprawdzałem czy zmienne (wszystkie) zawierają przed hashowaniem prawidłowe dane i wszystko jest ok. Ale w jednej linijce wszystko mi sie zmienia i nie umie tego poprawić (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Oto część kodu:

  1. <?php
  2. if(preg_match('#^\.add op (.*\S){1,30} (.*)#', $this->message, $this->tmp))
  3. // jeśli privmsg ma postac .add op (nick) (haslo) to robi sie akcja. Zmienna $message przechowuje tresc privmsg
  4. {
  5.       if($this->save_op( $this->tmp[1], $this->tmp[2] ))
  6.       $this->privmsg('Dodano uzytkownika do listy');
  7.       else
  8.       $this->privmsg('Nie dodano uzytkownika do listy');
  9. }
  10.  
  11. // metoda zapisuje op'a do pliku jesli nie istnieje w bazie.
  12. private function save_op( $what, $pass )
  13.   {
  14.   if(!file_exists($this->config['op_file']) || $this->is_op_exists( $what )) return false;
  15.     else
  16.     {
  17.     $dane = unserialize(file_get_contents($this->config['op_file']));
  18.     $dane[] = array('nick' => $what, 'pass' => $this->hash($pass));
  19.     file_put_contents($this->config['op_file'], serialize($dane));
  20.     return true;
  21.     }
  22.   }
  23.  
  24. // regexp ktore rozpoznaje czy user sie chce logowac:
  25. elseif(preg_match('#^\.log in (.+)#', $this->message))
  26. { // czyli postac .log in tajnehaslo
  27.  $this->log_in();
  28.  }
  29.  
  30. // sedno całego problemu metoda logowania
  31. private function log_in()
  32.   {
  33.   if(!$this->is_op_exists()) return false;
  34.    else
  35.    {
  36.    $dane = $this->read_op(); // odczytuje plik i unserializuje zawartosc
  37.    foreach($dane as $numbers => $user)
  38.      {
  39.      if($user['nick'] == $this->from) // zmienna $this->from zawiera autora privmsg
  40.        {
  41.        if($user['pass'] == $this->hash(substr($this->message, 8))) // tu sie dzieja dziwne rzeczy z haslem ;/
  42.          {
  43.          $this->access[] = $this->from; // dodanie usera do zalogowanych
  44.          $this->privmsg('Zostales zalogowany');
  45.          return true;
  46.          }
  47.           else
  48.           {
  49.           $this->privmsg('Nie zostales zalogowany');
  50.           return false;
  51.           }
  52.        }
  53.      }
  54.    }
  55.   }
  56.  
  57. // metoda hashujaca
  58. private function hash( $pass )
  59.   {
  60.   return md5(sha1($pass));
  61.   }
  62.  
  63. ?>


Z gory blogosławieństwo za pomoc (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował Apo 22.03.2006, 15:10:15
Go to the top of the page
+Quote Post

Posty w temacie


Closed TopicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 14:52