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
 
Start new topic
Odpowiedzi
bendi
post
Post #2





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


Cytat(nospor @ 2006-03-22 17:24:58)
co do tematu. mi osobiscie nie chce sie przebijac przez ten kod. nie mozna by go jakos uproscic, tak specjalnie dla nas?

Mi też niebardzo więc zrobiłem mały teścik:
  1. <?php
  2.  
  3. $a = array( 'Zend', 'Certified', 'Engineer' );
  4.  
  5. echo 'Tablica wejsciowa: ';
  6. echo '<pre>';
  7. print_r( $a );
  8. echo '</pre>';
  9. echo '<hr />';
  10.  
  11. for( $i=1; $i<=10; $i++ ) {
  12. echo 'Wypisuje porcje numer: ' . $i . '<br />';
  13. foreach( $a as $s ) {
  14. echo $s . ': ' . md5( sha1( $s ) ) . '<br />';
  15. }
  16. echo '<hr >';
  17. }
  18.  
  19. ?>


Który daje w wyniku:
Kod
Tablica wejœciowa:

Array
(
    [0] => Zend
    [1] => Certified
    [2] => Engineer
)

Wypisuje porcje numer: 1
Zend: 3da3d0efa32729c958e296ac9a6bca6a
Certified: 857393eea2b20c3b7cba6c6d2cf58664
Engineer: f0ece8c2cb7ea4a652c25e3402de1ab3

Wypisuje porcje numer: 2
Zend: 3da3d0efa32729c958e296ac9a6bca6a
Certified: 857393eea2b20c3b7cba6c6d2cf58664
Engineer: f0ece8c2cb7ea4a652c25e3402de1ab3

Wypisuje porcje numer: 3
Zend: 3da3d0efa32729c958e296ac9a6bca6a
Certified: 857393eea2b20c3b7cba6c6d2cf58664
Engineer: f0ece8c2cb7ea4a652c25e3402de1ab3

Wypisuje porcje numer: 4
Zend: 3da3d0efa32729c958e296ac9a6bca6a
Certified: 857393eea2b20c3b7cba6c6d2cf58664
Engineer: f0ece8c2cb7ea4a652c25e3402de1ab3

Wypisuje porcje numer: 5
Zend: 3da3d0efa32729c958e296ac9a6bca6a
Certified: 857393eea2b20c3b7cba6c6d2cf58664
Engineer: f0ece8c2cb7ea4a652c25e3402de1ab3

Wypisuje porcje numer: 6
Zend: 3da3d0efa32729c958e296ac9a6bca6a
Certified: 857393eea2b20c3b7cba6c6d2cf58664
Engineer: f0ece8c2cb7ea4a652c25e3402de1ab3

Wypisuje porcje numer: 7
Zend: 3da3d0efa32729c958e296ac9a6bca6a
Certified: 857393eea2b20c3b7cba6c6d2cf58664
Engineer: f0ece8c2cb7ea4a652c25e3402de1ab3

Wypisuje porcje numer: 8
Zend: 3da3d0efa32729c958e296ac9a6bca6a
Certified: 857393eea2b20c3b7cba6c6d2cf58664
Engineer: f0ece8c2cb7ea4a652c25e3402de1ab3

Wypisuje porcje numer: 9
Zend: 3da3d0efa32729c958e296ac9a6bca6a
Certified: 857393eea2b20c3b7cba6c6d2cf58664
Engineer: f0ece8c2cb7ea4a652c25e3402de1ab3

Wypisuje porcje numer: 10
Zend: 3da3d0efa32729c958e296ac9a6bca6a
Certified: 857393eea2b20c3b7cba6c6d2cf58664
Engineer: f0ece8c2cb7ea4a652c25e3402de1ab3


No i jak dla mnie hasze są takie same - więc lepiej sprawdź swój kod.
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: 26.12.2025 - 23:30