GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: ProPeti - 2014. augusztus 23. - 13:44:17

Cím: udb_hash Pawnoban és PHP-ban
Írta: ProPeti - 2014. augusztus 23. - 13:44:17
Sziasztok!
Elkezdtem írni egy regisztrációs rendszert weben (karakter regisztrálás). Találtam a neten hozzá egy udb_hash-es function-t mégpedig ezt:
 
function udb_hash($pass)
{
$length = strlen($pass);
$s1 = 1;
$s2 = 0;
   
for($i=0; $i<$length; $i++)
{
  $s1 = ($s1 + $pass[$i]) % 65521;
  $s2 = ($s2 + $s1)       % 65521;
}
$wy= ($s2 << 16) + $s1;
return $wy;
}

 
Ezzel így elmentem eg yváltozóba amit késõbb majd betöltök mysql-be:
 
$jelszo = udb_hash($jelszo);

 
Az eredmény teljesen jó, mármint abból a szempontból nézve, hogy phpmyadminba a jelszónál egy számokból álló kombinációt kapok:
\"pQ0AFi2.png\"
Ez eddig mind szép és jó, viszont ha belépek a GTA-ba és beírom a HELYES jelszót akkor ez fogad:
\"3eAtLfU.png\"
Itt a pawnó kód:
 
new name[MAX_PLAYER_NAME];
   GetPlayerName(playerid, name, sizeof(name));
   mysql_format(kapcs, query, 2048, \"SELECT * FROM jatekosok WHERE nev=\'%e\' LIMIT1\", name);
   mysql_query(kapcs, query);
   new tmp;
   tmp = cache_get_field_content_int(0, \"jelszo\");
   if(udb_hash(inputtext) != tmp)
   {
      SendClientMessage(playerid, COLOR_RED, \"(( Sikertelen bejeletnkezési kísérlet! ))\");
      TogglePlayerSpectating(playerid, 1);
      ShowPlayerDialog(playerid, 2, DIALOG_STYLE_PASSWORD, \"Bejelentkezés\", \"{FFFFFF}Üdv a {00BFFF}LaserRPG {FFFFFF}szerverén!\\n\\nÍrd be a jelszavad és lépj be!\", \"Login\", \"Exit\");
   }

 
A többi része gondolom nem kell nektek.
(Ha képen jobban látszik a kód:
\"yYYX8pg.png\"
)
Elõre is nagyon szépen köszönöm a segítségeteket!
Cím: udb_hash Pawnoban és PHP-ban
Írta: ►ѕтa - 2014. augusztus 23. - 13:56:54
Másold be az udb_hash funkciód SA:MP-ban.
Cím: udb_hash Pawnoban és PHP-ban
Írta: ProPeti - 2014. augusztus 23. - 13:59:53
Ott nincsen rá funkcióm, viszont van 2 .inc-m amit dininél erre használtam, szóval valamelyikbe benne kell legyen:
 
#include <dudb>
#include <dutils>

 
vagy az egyikbe vagy a másikba.
Cím: udb_hash Pawnoban és PHP-ban
Írta: ►ѕтa - 2014. augusztus 23. - 14:08:24
Ha printfbe vagy SendClientMessage-be kiíratod ugyanazt adja ki mint ami az adatbázisban van?
Cím: udb_hash Pawnoban és PHP-ban
Írta: ProPeti - 2014. augusztus 23. - 14:16:51
Ha így akarom kiírtani:
printf(tmp);

 
Akkor ezt kapom:
error 035: argument type mismatch (argument 1)
Cím: udb_hash Pawnoban és PHP-ban
Írta: rayle - 2014. augusztus 23. - 14:19:27
printf(\"%d\", tmp);
Cím: udb_hash Pawnoban és PHP-ban
Írta: bbTamas - 2014. augusztus 23. - 14:23:01
Használj mást jelszó titkosításra pl:. MD5-t, amit alapból mysql is kezel.
Adatbázisodban mi a mezõ típusa? Úgyse számként állítottad be?
Cím: udb_hash Pawnoban és PHP-ban
Írta: ProPeti - 2014. augusztus 23. - 14:24:40
Consoleba mindig \"0\"-át ír ki.
Cím: udb_hash Pawnoban és PHP-ban
Írta: rayle - 2014. augusztus 23. - 14:36:48
Valószínûleg ezért:
mysql_format(kapcs, query, 2048, \"SELECT * FROM jatekosok WHERE nev=\'%e\' LIMIT1\", name);

 
%e helyett %s kéne oda. Javított kód:
 
new name[MAX_PLAYER_NAME];
                        GetPlayerName(playerid, name, sizeof(name));
                        mysql_format(kapcs, query, 2048, \"SELECT * FROM jatekosok WHERE `nev` = \'%s\' LIMIT 1\", name);
                        mysql_query(kapcs, query);
                        new tmp;
                        tmp = cache_get_field_content_int(0, \"jelszo\");
                        if(udb_hash(inputtext) != tmp)
                        {
                                SendClientMessage(playerid, COLOR_RED, \"(( Sikertelen bejeletnkezési kísérlet! ))\");
                                TogglePlayerSpectating(playerid, 1);
                                ShowPlayerDialog(playerid, 2, DIALOG_STYLE_PASSWORD, \"Bejelentkezés\", \"{FFFFFF}Üdv a {00BFFF}LaserRPG {FFFFFF}szerverén!\\n\\nÍrd be a jelszavad és lépj be!\", \"Login\", \"Exit\");
                        }
Cím: udb_hash Pawnoban és PHP-ban
Írta: ProPeti - 2014. augusztus 23. - 14:37:49
Amúgy én szívesen csinálnám MD5-ben mert az biztonságosabb, csak ott a pawno ír errort hiába szedek le inc-eket :D
Szóval ha valaki megmondja, hogy kell pawnoban használni nekem az is jó :)

Dupla hozzászólás automatikusan összefûzve. ( 2014. augusztus 23. - 14:46:02 )

Idézetet írta: rayle date=1408797408\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"50293\" data-ipsquote-contentclass=\"forums_Topic
Valószínûleg ezért:
mysql_format(kapcs, query, 2048, \"SELECT * FROM jatekosok WHERE nev=\'%e\' LIMIT1\", name);

 
%e helyett %s kéne oda. Javított kód:
 
new name[MAX_PLAYER_NAME];
                        GetPlayerName(playerid, name, sizeof(name));
                        mysql_format(kapcs, query, 2048, \"SELECT * FROM jatekosok WHERE `nev` = \'%s\' LIMIT 1\", name);
                        mysql_query(kapcs, query);
                        new tmp;
                        tmp = cache_get_field_content_int(0, \"jelszo\");
                        if(udb_hash(inputtext) != tmp)
                        {
                                SendClientMessage(playerid, COLOR_RED, \"(( Sikertelen bejeletnkezési kísérlet! ))\");
                                TogglePlayerSpectating(playerid, 1);
                                ShowPlayerDialog(playerid, 2, DIALOG_STYLE_PASSWORD, \"Bejelentkezés\", \"{FFFFFF}Üdv a {00BFFF}LaserRPG {FFFFFF}szerverén!\\n\\nÍrd be a jelszavad és lépj be!\", \"Login\", \"Exit\");
                        }

 

Így sem jó :// ugyanazt csinálja
Cím: udb_hash Pawnoban és PHP-ban
Írta: BackUP - 2014. augusztus 23. - 15:23:58
Ehhez a kódoláshoz nem értek igazán, fõleg nem olyan nyelvben ami nem PAWN.
Rayle amit mondott az egyértelmûen nem válik be, mivel a \'%e\' is string, csak escapelt string ami megakadályozza az SQL Injectiont.
A \'dudb\' incben van az udb_hash függvény, töröld ki és csinálj egy olyat ami ugyanaz mint phpban, vagy alakítsd át valamelyiket. Mint írtam, nem értek hozzá, de azért ide bemásolom, hátha neked, vagy valakinek segíteni fog.
 

stock udb_hash(buf[]) {
new length=strlen(buf);
    new s1 = 1;
    new s2 = 0;
    new n;
    for (n=0; n<length; n++)
    {
       s1 = (s1 + buf[n]) % 65521;
       s2 = (s2 + s1)     % 65521;
    }
    return (s2 << 16) + s1;
}

 
Nem tudom phpban van e, de a SAMPban a mysql ismeri a \'SHA1\' kódolást, melyet így tudsz használni:
\'\"SELECT * FROM jatekosok WHERE `nev` = \'%s AND jelszo=SHA1(\'%e\') LIMIT 1\"
Cím: udb_hash Pawnoban és PHP-ban
Írta: ProPeti - 2014. augusztus 23. - 15:45:09
Köszönöm a segítséget de nem ment szóval inkább SHA1-el csinálom!