Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasa hashująca
Rookie
post
Post #1





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

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


Witam,
nie dawno zacząłem bawić się programowaniem obiektowym w php.
Wczoraj wieczorem skończyłem prosty skrypt, który hashuje wpisane słowo na dowolny algorytm hashujący, do wyboru do koloru, są wszystkie możliwości.
Ma obsługę błędów, po pozostawieniu któregokolwiek pustego pola, pokazywany jest odpowiedni komunikat. Jest odporny na ataki XSS.
Oczywiście graficznie jest goły ale można go dowolnie ubrać w jakąś skórkę smile.gif
Proszę bardzo może komuś się przyda, najprostszy jaki mógł być, wypociny wypocone z 1-dniowej nauki programowania obiektowego smile.gif :
  1. <?php
  2. $tablica = hash_algos();
  3. $anty_xss_hash = htmlspecialchars(trim($_POST[hash]));
  4. class buduj {
  5. function strona() {
  6. ?>
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  8. <html>
  9. <head>
  10. <title>Hashowanie</title>
  11. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  12. <style type="text/css">body {font-size: 12; font-family: Arial;} .formularz {width: 200px;} .wybor {width: 204px;}</style>
  13. </head>
  14. <body>
  15. <?php
  16. }
  17. function stopka() {
  18. ?>
  19. </body>
  20. </html>
  21. <?php
  22. }
  23. }
  24. class hash {
  25. var $hash;
  26. var $rodzaj;
  27. public $blad='';
  28. public function hashuj($zahashuj) {
  29. $rodzaj = $this->rodzaj;
  30. if(in_array($rodzaj, hash_algos())) {
  31. $zahashuj = $this->hash;
  32. $zahashuj = hash($rodzaj, $zahashuj);
  33. return $zahashuj;
  34. } else {
  35. $this->blad = '<span style="color: red;">Nie ma takiego algorytmu hashującego</span><br>';
  36. echo $this->blad;
  37. }
  38. }
  39. public function czy_jest_wpis($pusto, $pusto2) {
  40. $pusto = $this->hash;
  41. $pusto2 = $this->rodzaj;
  42. if(strlen($pusto) < 1 || strlen($pusto2) < 1) {
  43. $this->blad = '<span style="color: red;">Wypełnij pola</span><br>';
  44. echo $this->blad;
  45. }
  46. }
  47. }
  48. $zbuduj = new buduj();
  49. $zbuduj->strona();
  50. $hashuj = new hash();
  51. $hashuj->hash = $anty_xss_hash;
  52. $hashuj->rodzaj = $_POST[rodzaj];
  53. if (isset($_POST[hashowanie])) {
  54. $hashuj->czy_jest_wpis($anty_xss_hash, $_POST[rodzaj]);
  55. if($hashuj->blad=='') {
  56. echo '<table><tr><td align="right">Wpisana fraza:</td><td><b>';
  57. echo $anty_xss_hash;
  58. echo '</b></td></tr><tr><td>Zahashowane ';
  59. echo $_POST[rodzaj];
  60. echo ':</td><td><b>';
  61. echo $hashuj->hashuj($anty_xss_hash);
  62. echo '</b></td></tr></table>';
  63. }
  64. }
  65. ?>
  66. <form action="klasa_hashujaca.php" method="POST">
  67. <table><tr><td>Wybierz algorytm hashujący:</td>
  68. <td><select name="rodzaj" class="wybor">
  69. <option value="">Wybierz</option>
  70. <?php
  71. foreach ($tablica as $wyswietl){
  72. if ($_POST[rodzaj] == $wyswietl) $zaznaczone = ' selected';
  73. else $zaznaczone = '';
  74. echo "<option$zaznaczone>$wyswietl</option>\r\n";
  75. }
  76. ?>
  77. </select></td></tr><tr><td>Wpisz frazę do zahashowania:</td>
  78. <td><input class="formularz" type="text" name="hash" value=""></td></tr>
  79. <tr><td colspan="2"><input name="hashowanie" type="submit" value="Hashuj"></td></tr>
  80. </form>
  81. <?php $zbuduj->stopka; ?>

Mam nadzieję, że komuś się przyda.
Pozdrawiam.

Ten post edytował Rookie 31.08.2009, 00:18:19
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
adrian.p
post
Post #2





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 27.03.2009

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


To nie ma nic wspolnego z OOP.
Go to the top of the page
+Quote Post
nospor
post
Post #3





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




Cytat
Jest odporny na ataki XSS.
Szkoda ze nie jest odporny na masę bledow ktore generujesz...
Włacz sobie wyswietlanie wszystkich bledow
http://nospor.pl/php-faq-n29.html#faq-2
a zrozumiesz o czym mowie.

Jak już uzywasz php5 to uzywaj php5 a nie walisz jakies kwiatki w stylu:
var $zmienna

O klasie buduj już nawet nie będę sie wypowiadał

ps: przenosze. To nie nadaje się do dzialu Gotowe rozwiązania. Nie wspomnę już o tym, że ten dział wogóle służy czemu innemu.


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

"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
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Eee... OOP do czegoś takiego?
  1. <? if(in_array($_POST['algo'], hash_algos())){
  2. $hash = hash($_POST['algo'], $_POST['src']);
  3. }
Programowanie obiektowe ma służyć Tobie, a nie Ty mu... jak nie robi nic poza utrudnianiem życia to jest niewarte stosowania.
Go to the top of the page
+Quote Post
Rookie
post
Post #5





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

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


Nie wiedziałem, że są jakieś błędy, mi działa wszystko normalnie, adrian.n, właśnie na tym polega programowanie obiektowe, na klasach...
nospor, wyrozumiałości, mówiłem, że to po jednym dniu nauki, korzystam z bardzo wychwalanej przez ludzi książki PHP i MySQL Vademecum profesjonalisty i tam od razu pokazują var $zmienna, jeśli ową posiadasz, przeczytaj rozdział "obiektowy php". A zaraz zobaczę to wyświetlanie wszystkich błędów
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




Cytat
korzystam z bardzo wychwalanej przez ludzi książki PHP i MySQL Vademecum profesjonalisty i tam od razu pokazują var $zmienna
Być moze mowią tam oni o obiektowce w php4. W php5 var $zmienna jest już deprecated.
Poza tym skoro mówią var $zmienna to czemu innym razem piszesz public $zmienna? winksmiley.jpg

Cytat
adrian.n, właśnie na tym polega programowanie obiektowe, na klasach...
No wlasnie nie do konca. To ze uzyles klas, nie znaczy ze uzyles OOP


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

"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
Rookie
post
Post #7





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

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


Piszę public $blad, żeby potem poza klasą mógł sprawdzić czy jest pusty czy nie.
To w takim razie kiedy wg ciebie użył bym OOP ?
Dopiero co się zacząłem tego uczyć w wyżej wymienionej książce tylko tak mam wyjaśnione, zamówiłem już inną ale jest w drodze ;p
i przy okazji jak już jesteśmy przy temacie, to czego użyć zamiast var $zmienna, nic? po prostu $zmienna?, a może czegoś innego.
I wreszcie może podpowiesz jak usunąć tą masę błędów?:
Cytat
Notice: Use of undefined constant hash - assumed 'hash' in C:\Documents and Settings\\Moje dokumenty\HTML\Witryna\klasa_hashujaca.php on line 5

Notice: Undefined index: hash in C:\Documents and Settings\\Moje dokumenty\HTML\Witryna\klasa_hashujaca.php on line 5

Notice: Use of undefined constant rodzaj - assumed 'rodzaj' in C:\Documents and Settings\\Moje dokumenty\HTML\Witryna\klasa_hashujaca.php on line 54

Notice: Undefined index: rodzaj in C:\Documents and Settings\\Moje dokumenty\HTML\Witryna\klasa_hashujaca.php on line 54

Notice: Use of undefined constant hashowanie - assumed 'hashowanie' in C:\Documents and Settings\\Moje dokumenty\HTML\Witryna\klasa_hashujaca.php on line 55

Notice: Undefined property: buduj::$stopka in C:\Documents and Settings\\Moje dokumenty\HTML\Witryna\klasa_hashujaca.php on line 83


Ten post edytował Rookie 31.08.2009, 08:45:10
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




Cytat
Piszę public $blad, żeby potem poza klasą sprawdzić czy jest pusty czy nie.
a var $zmienna wg. ciebie nie pozwoli na to? Sprawdź winksmiley.jpg

Cytat
i przy okazji jak już jesteśmy przy temacie, to czego użyć zamiast var $zmienna, nic? po prostu $zmienna?, a może czegoś innego.

public $zmienna - gdy zmienna ma byc publiczna
private $zmienna - gdy zmienna ma byc prywatna
protected $zmienna - gdy zmienna ma byc prywatna, ale dostepna w klasa dziedziczących
$zmienna - gdy chcesz otrzymac ladny PARSE ERROR smile.gif

jesli takich rzeczy nie piszą w Twojej książce to zmień na bardziej aktualną.

Cytat
I wreszcie może podpowiesz jak usunąć tą masę błędów?
No przeciez napisali: uzywasz stalej ktorej nie masz...
nie $_POST[zmienna] a $_POST['zmienna']

Cytat
Notice: Undefined property: buduj::$stopka in C:\Documents and Settings\\Moje dokumenty\HTML\Witryna\klasa_hashujaca.php on line 83
stopka to funkcja wiec nie: $zbuduj->stopka
a: $zbuduj->stopka()



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

"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
Rookie
post
Post #9





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

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


Tak, zauważyłem, ze stopką, a co do publicznej przeczytaj dokładnie co napisałem
Cytat
Piszę public $blad, żeby potem poza klasą mógł sprawdzić czy jest pusty czy nie.

A co do różnic pomiędzy $_POST[zmienna] a $_POST['zmienna] to nie wiedziałem, myślałem, że to to samo

Ten post edytował Rookie 31.08.2009, 08:55:50
Go to the top of the page
+Quote Post
nospor
post
Post #10





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




Cytat
Tak, zauważyłem, ze stopką, a co do publicznej przeczytaj dokładnie co napisałem
Przeciez wiem co napisales. To ty przeczytaj dokladnie co ja ci odpisalem tongue.gif


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

"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
Rookie
post
Post #11





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

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


No też zrozumiałem i wiem, że var $zmienna na to nie pozwoli, ale ja chcę odczytać tylko zmienną błąd więc tylko ona była public, resztę zmienię z var na private i już, zburzę klasę buduj ;p, skoro ci nie odpowiada, ale napisz dlaczego, dlatego, że nie ma w niej żadnych operacji oprócz wyświetlania? Tylko taki minus mi do głowy wpada ;p
EDIT: A jednak nie, nie mogą być protected ani private bo z zewnątrz nadaję im wartości, ustawiłęm wszystkie na public

Ten post edytował Rookie 31.08.2009, 09:09:53
Go to the top of the page
+Quote Post
nospor
post
Post #12





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




Cytat
No też zrozumiałem i wiem, że var $zmienna na to nie pozwoli,
Miales sprawdzic...jakbys sprawdzil to bys sie dowiedzial ze jednak pozwoli. var $zmienna domyslnie traktowane jest jak public $zmienna.
Jak o coś proszę to rób to, bo się pogniewamy biggrin.gif

poza tym spojrzałem twoje tematy i widze że już ten problem przerabiano z tobą. Nie poto się ludzie tu na forum męczą byś ty przy kolejnych edycjach swojej klasy miał ich porady w czterech literach.

Cytat
zburzę klasę buduj ;p, skoro ci nie odpowiada, ale napisz dlaczego, dlatego
A to juz niech ci wyjasni ktos inny.


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

"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
Rookie
post
Post #13





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

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


Wtedy kiedy tamten temat napisałem, to nie zabardzo wszystko kumałem, do wszystkiego dochodzi się powoli, małymi krokami smile.gif
Nie sprawdziłem co do var ale myślałęm, że nie wpuści, sorka ;p.
Skoro już przy temacie jesteśmy to jednak nalegam o wyjaśnienie nowicjuszowi, bo chcę zaraz udostępnić klasę hashującą v2 bez błędów biggrin.gif
Go to the top of the page
+Quote Post
Crozin
post
Post #14





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
A co do różnic pomiędzy $_POST[zmienna] a $_POST['zmienna] to nie wiedziałem, myślałem, że to to samo
W tym momencie (chociaż i tak wiem, że na 99% zrobisz błąd i nie posłuchasz) powinieneś sobie na kilka dni odpuścić OOP i zająć się postawami PHP, bo ich Ci brakuje.

A żeby nie było, że nie pomagam...
1) Weź sobie inny przykład, bo "klasa hashująca"... nie. Napisz sobie klasę do obsługi wysyłki maili czy pagera (tak mi przyszło do głowy patrząc na sygnaturkę nospora).
2) hash bije Twój kod o głowę
Go to the top of the page
+Quote Post
Rookie
post
Post #15





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

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


Crozin, podstaw mi nie brakuje, poza tą jedną, której już też nie.
A do obsługi maili nie za bardzo bo szperałem po internecie, nawet identyczny problem na tym forum był i nie mogę ustawić serwera pod wysyłkę maili.
Pewnie bym mógł jakbym ściągnął jakiegoś mailera (podawano linki) ale nie chcę tego ściągać dopóki naprawdę maile mi nie będą potrzebne.
Wróciłem na chwilę do domu, zaraz znowu wyjeżdżam, ale tylko szybko przedstawię swój skrypt hashujący. Mam nadzieję, że zajrzy tutaj np. nospor ;p
Mój skrypt nie wyświetla teraz żadnego błędu, sprawdziłęm i wyrzuciłem linijki odpowiadające za wyświetlanie wszystkiego, ale jak ktoś chce sprawdzić mojże je wpisać si się przekonać:
  1. <?php
  2. class hash {
  3. public $hash;
  4. public $rodzaj;
  5. public $blad='';
  6. public function hashuj($zahashuj) {
  7. $rodzaj = $this->rodzaj;
  8. if(in_array($rodzaj, hash_algos())) {
  9. $zahashuj = $this->hash;
  10. $zahashuj = hash($rodzaj, $zahashuj);
  11. return $zahashuj;
  12. } else {
  13. $this->blad = '<span style="color: red;">Nie ma takiego algorytmu hashującego</span><br>';
  14. echo $this->blad;
  15. }
  16. }
  17. public function czy_jest_wpis($pusto, $pusto2) {
  18. $pusto = $this->hash;
  19. $pusto2 = $this->rodzaj;
  20. if(strlen($pusto) < 1 || strlen($pusto2) < 1) {
  21. $this->blad = '<span style="color: red;">Wypełnij pola</span><br>';
  22. echo $this->blad;
  23. }
  24. }
  25. }
  26. $tablica = hash_algos();
  27. ?>
  28. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  29. <html>
  30. <head>
  31. <title>Hashowanie</title>
  32. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  33. <style type="text/css">body {font-size: 12; font-family: Arial;} .formularz {width: 200px;} .wybor {width: 204px;}</style>
  34. </head>
  35. <body>
  36. <?php
  37. if (isset($_POST['hashowanie'])) {
  38. $anty_xss_hash = htmlspecialchars(trim($_POST['hash']));
  39. $hashuj = new hash();
  40. $hashuj->hash = $anty_xss_hash;
  41. $hashuj->rodzaj = $_POST['rodzaj'];
  42. $hashuj->czy_jest_wpis($anty_xss_hash, $_POST['rodzaj']);
  43. if($hashuj->blad=='') {
  44. echo '<table><tr><td align="right">Wpisana fraza:</td><td><b>';
  45. echo $anty_xss_hash;
  46. echo '</b></td></tr><tr><td>Zahashowane ';
  47. echo $_POST['rodzaj'];
  48. echo ':</td><td><b>';
  49. echo $hashuj->hashuj($anty_xss_hash);
  50. echo '</b></td></tr></table>';
  51. }
  52. }
  53. ?>
  54. <form action="klasa_hashujaca.php" method="POST">
  55. <table><tr><td>Wybierz algorytm hashujący:</td>
  56. <td><select name="rodzaj" class="wybor">
  57. <option value="">Wybierz</option>
  58. <?php
  59. foreach ($tablica as $wyswietl){
  60. if (isset($_POST['rodzaj'])) $zaznaczone = ($_POST['rodzaj'] == $wyswietl) ? ' selected' : '';
  61. else $zaznaczone = '';
  62. echo "<option$zaznaczone>$wyswietl</option>\r\n";
  63. }
  64. ?>
  65. </select></td></tr><tr><td>Wpisz frazę do zahashowania:</td>
  66. <td><input class="formularz" type="text" name="hash" value=""></td></tr>
  67. <tr><td colspan="2"><input name="hashowanie" type="submit" value="Hashuj"></td></tr>
  68. </form>
  69. </body>
  70. </html>


Ten post edytował Rookie 31.08.2009, 12:08:17
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 06:45