Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Closed TopicStart new topic
> md5 i sha1 dają różne wyniki
Apo
post 22.03.2006, 15:08:16
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ć 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

Ten post edytował Apo 22.03.2006, 15:10:15
Go to the top of the page
+Quote Post
Wave
post 22.03.2006, 16:02:27
Post #2





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


Sprawdź kod dokładnie. Napewno nie dają różnych wyników dla tego samego hasła.
Go to the top of the page
+Quote Post
Apo
post 22.03.2006, 16:09:59
Post #3





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

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


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
Go to the top of the page
+Quote Post
kszychu
post 22.03.2006, 16:20:17
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


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.


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
nospor
post 22.03.2006, 16:24:58
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
bendi
post 22.03.2006, 16:42:42
Post #6





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
dr_bonzo
post 22.03.2006, 16:55:02
Post #7





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Apo pokaz dla jakich danych ci nie dziala.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Apo
post 22.03.2006, 17:39:38
Post #8





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

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


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

Ten post edytował Apo 22.03.2006, 17:41:06
Go to the top of the page
+Quote Post
bendi
post 23.03.2006, 08:55:17
Post #9





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

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


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?


--------------------
Go to the top of the page
+Quote Post
Apo
post 23.03.2006, 14:58:30
Post #10





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

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


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ć ;]
Go to the top of the page
+Quote Post
nospor
post 24.03.2006, 08:15:59
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Jaja to ty byś chciał mieć ;]
blink.gif
PRzy następnych takich jajach - warn


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 23.06.2025 - 18:54