Witam,

Jako ze to forum przegląda wiele osób pewnie ktoś będzie miał jakaś koncepcje a mianowicie rozchodzi mi się o mała wskazówkę lub coś więcej... Przechodząc do sedna sprawy;
Chce napisać panel gracza do gry takiej jak minecraft (może słyszeliście), znalazłem odpowiedni plugin do tej gry który zapisuje hasła i loginy do MySQL'a rejestracja użytkownika odbywa się in-game (link do dokumentacji pluginu https://github.com/CypherX/xAuth/wiki). Wszystko ładnie pięknie gdyby nie funkcja która hashuje te hasła (link do niej https://github.com/CypherX/xAuth/wiki/Password-Hashing). Umiem napisać prosty skrypt z logowaniem, lecz tutaj chyba trochę się przeliczyłem a czy kolwiek się nie podaje . Czy ktoś mógłby dać mi jakaś wskazówkę jak wkomponować skrypt hasujacy z pluginu do systemu logowania?

Plugin przy rejetracji tworzy w DB tabele o nazwie: accounts z takimi polamii jak: id, playername, password, email, registerdate, registerip, lastlogindate, lastloginip, active

Poniżej jak wygląda DB tabela accounts


Zastosował bym szyfrowanie sha1 () gdyby nie to ze rejestracja odbywa sie w grze i to wlasnie w grze gracze rejestruja swoje acc tym samym plugin hashuje za pomoca algorytmu whirpool

poniżej dla leniwych to co autor pluginu zostawil w dokumentacji:
  1. function encryptPassword($password) {
  2. $salt = substr(hash('whirlpool', uniqid(rand(), true)), 0, 12);
  3. $hash = hash('whirlpool', $salt . $password);
  4. $saltPos = (strlen($password) >= strlen($hash) ? strlen($hash) : strlen($password));
  5. return substr($hash, 0, $saltPos) . $salt . substr($hash, $saltPos);
  6. }


  1. function checkPassword($realPass, $checkPass) {
  2. //check for old encryption (md5 or whirlpool)
  3. if (strlen($realPass) == 32 || strlen($realPass) == 128) {
  4. $hash = (strlen($realPass) == 32 ? md5($checkPass) : hash('whirlpool', $checkPass));
  5. if ($realPass == $hash) {
  6. // change password to new encryption?
  7. return true;
  8. } else
  9. return false;
  10. }
  11.  
  12. // xAuth 2 encryption
  13. $saltPos = (strlen($checkPass) >= strlen($realPass) ? strlen($realPass) : strlen($checkPass));
  14.  
  15. // extract salt
  16. $salt = substr($realPass, $saltPos, 12);
  17.  
  18. $hash = hash('whirlpool', $salt . $checkPass);
  19. return substr($hash, 0, $saltPos) . $salt . substr($hash, $saltPos) == $realPass;
  20. }


Oraz schemat jak przebiega hashowanie:
Example

Plaintext: password
Hashed: cb5ef15b400cef07addb37e00e2cdd6d1b508a2a26f0befcb0f9d8fd03c1d67be1690eba2287c4f7
6a590f2feae654ce5aee9943a23babb8e56381fe3214a48ad8754a1fd9eb
How does it work?

1. First, the salt is created by taking the first 12 characters of a randomly generated Whirlpool hash.

400cef07addb
2. Next, the salt and plaintext password are combined and hashed.

400cef07addbpassword
cb5ef15b37e00e2cdd6d1b508a2a26f0befcb0f9d8fd03c1d67be1690eba2287c4f76a590f2feae6
54ce5aee9943a23babb8e56381fe3214a48ad8754a1fd9eb
3. Finally, the salt is inserted into the previously generated hash at a position determined by the length of the plaintext password.

cb5ef15b400cef07addb37e00e2cdd6d1b508a2a26f0befcb0f9d8fd03c1d67be1690eba2287c4f7
6a590f2feae654ce5aee9943a23babb8e56381fe3214a48ad8754a1fd9eb


wydaje mi się ze funkcji checkPassword używa sie do sprawdzenia zgodności haseł ( zwraca wartość logiczną ) a tej drugiej do hashowania ( zwraca ciąg znakowy),
nie wiem do czego w dalszej części skryptu logowania przypisać te 2 zmienne $realPass, $checkPass no jeszcze jest sprawa zhashowanego hasła w bazie danych ;/
No i następne i najważniejsze jak to sensownie wkomponować w skrypt logowania;/

Z gory dziekuje za jaka kol wiek pomoc ja zabieram sie dalej za to moze metoda prob i bledow jakos dodjde do konca. pozdrawiam