Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: md5 i sha1 dają różne wyniki
Forum PHP.pl > Forum > PHP
Apo
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ć 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 tongue.gif
Wave
Sprawdź kod dokładnie. Napewno nie dają różnych wyników dla tego samego hasła.
Apo
Cytat
Sprawdzałem czy zmienne (wszystkie) zawierają przed hashowaniem prawidłowe dane i wszystko jest ok

gdybym 3 dni nad tym nie siedzial to bym nie dawal postu smile.gif
kszychu
W kwestii formalnej: po co haszujesz hasza? Myslisz, że w ten sposób będziesz miał 2 razy mocniej kodowane hasła?.. Poszperaj na forum, była jakiś czas temu dyskusja o tym.
nospor
Cytat
Poszperaj na forum, była jakiś czas temu dyskusja o tym.

http://forum.php.pl/index.php?showtopic=42615

co do tematu. mi osobiscie nie chce sie przebijac przez ten kod. nie mozna by go jakos uproscic, tak specjalnie dla nas?
bendi
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.
dr_bonzo
Apo pokaz dla jakich danych ci nie dziala.
Apo
Dobra to ja dam cały kod bedzie lepiej.
www.void.prv.pl/bot.zip
Spakowalem poniewaz jest tam kilka plikow i 1 folder. Wystarczy plik config.php ustawic oraz w class.php kanal wpisac. Komendy sa dostepne poleceniem .help (trzeba byc adminem lub byc na liscie). Następnie należy dodac op'a do pliku czyli
.add op nick haslo
potem powinno przyjsc potwierdzenie. Nastepnie zmieniamy nick na ten podany przedchwilą i sie probujemy zalogowac:
.log in haslo
No i sie nie da. Problem pewnie lezy w metodzie log_in().
Wszystkie kemendy sa dostepne poleceniem .help
bendi
Cytat(Apo @ 2006-03-22 18:39:38)
Dobra to ja dam cały kod bedzie lepiej.
www.void.prv.pl/bot.zip
Spakowalem poniewaz jest tam kilka plikow i 1 folder. Wystarczy plik config.php ustawic oraz w class.php kanal wpisac. Komendy sa dostepne poleceniem .help (trzeba byc adminem lub byc na liscie). Następnie należy dodac op'a do pliku czyli
.add op nick haslo
potem powinno przyjsc potwierdzenie. Nastepnie zmieniamy nick na ten podany przedchwilą i sie probujemy zalogowac:
.log in haslo
No i sie nie da. Problem pewnie lezy w metodzie log_in().
Wszystkie kemendy sa dostepne poleceniem .help

Ty jaja sobie robisz, prawda?
Apo
Juz znalazłem problem. Były nim znaki nowego wiersza na koncu \n.
Cytat
Ty jaja sobie robisz, prawda?

Jaja to ty byś chciał mieć ;]
nospor
Cytat
Jaja to ty byś chciał mieć ;]
blink.gif
PRzy następnych takich jajach - warn
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.