Whirlpool Mi is ez?Hála
Y_Less-nek, a PAWN nyelvben is lehetõségünk van a
Whirlpool algoritmus használatára, ami segítségével a legbiztonságosabban kezelhetjük szerverünkön a karakterláncokat. Általában ezek a karakterláncok jelszavak szoktak lenni, a példában is ezt fogom bemutatni.
Whirlpool? De sokféle más megoldás is van!Igen, de azok könnyedén dekódolhatók, vagy rosszabb esetben még csak kódolva sincsenek. Nem vagyok benne biztos, hogy a szerver játékosai örülnének, ha tudnák, hogy a szervergazda kezében van a jelszavuk... Ezért jó a Whirlpool, mivel ( még egyenlõre ) nem lehet dekódolni.
Telepítés / ÜzembehozásElõször is, töltsük le a plugint
innen. Ezután helyezzük el a
szervermappánk/plugins mappában( ha nincs ilyen mappa, akkor hozd létre! ), majd nyissuk meg a
server.cfg-t, és adjuk hozzá a következõ sort:
plugins Whirlpool
plugins Whirlpool.so
(
Megjegyzés: Ha már a server.cfg fájlunkban van plugins nevû sor, akkor ahhoz adjuk hozzá, ne csináljunk újat! )
Ezután nyissuk meg a Pawno-t, és ágyazzuk be a következõ képpen( csak ne más függvénybe rakjuk! ):
native WP_Hash( buffer[ ], len, const str[ ] );
Mostantól a rendelkezésünkre áll a függvény!
Példa a használatáraA példában egy regisztrációs rendszer
jelszó \'mentését\' / ellenõrzését fogom leírni.
Megjegyzés: A példában a
dini függvénykönyvtárat csak az egyszerûség kedvéért használtam! A példában szereplõ egyéb funkcióktól nem kell \'megijedni\', majd egy következõ leírásban azok is sorra kerülnek.
//Fejállományok beágyazása
#include < a_samp >
#include < dini >
#include < sscanf2 >
#include < zcmd >
//\'WP_Hash\' függvény nativálása
native WP_Hash( buffer[ ], len, const str[ ] );
//Definíciók
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xFF0000AA
#define BUFFER_LEN 145
CMD:register( playerid, params[ ] ) {
//Tároló létrehozása a játékos által beírt sztringnek, és az \'új\' jelszónak
new szPass[ 32 ];
new szHash[ BUFFER_LEN ];
if( sscanf( params, \"s[32]\", szPass ) ) {
SendClientMessage( playerid, COLOR_RED, \"Használat: /register < Jelszó >\" );
} else {
//A jelszó kódolása a \'szHash\' sztringbe, majd elmentése a játékos adatlapjába
WP_Hash( szHash, sizeof szHash, szPass );
dini_Set( PlayerAccount( playerid ), \"Password\", szHash );
SendClientMessage( playerid, COLOR_GREEN, \"Sikeres regisztráció!\" );
}
return 1;
}
CMD:login( playerid, params[ ] ) {
//Tároló létrehozása a játékos által beírt sztringnek, és a jelszónak
new szPass[ 32 ];
new szHash[ BUFFER_LEN ];
if( sscanf( params, \"s[32]\", szPass ) ) {
SendClientMessage( playerid, COLOR_RED, \"Használat: /login < Jelszó >\" );
} else {
//A jelszó kódolása a \'szHash\' sztringbe
WP_Hash( szHash, sizeof szHash, szPass );
//A kódolt jelszó összehasonlítása a már lementett( kódolt ) jelszóval
if( strcmp( szHash, dini_Get( PlayerAccount( playerid ), \"Password\" ) ) != 0 ) {
SendClientMessage( playerid, COLOR_RED, \"Helytelen jelszó!\" );
} else {
SendClientMessage( playerid, COLOR_GREEN, \"A bejelentkezés sikeres volt!\" );
}
}
return 1;
}
GetPlayerNameEx( playerid ) {
new z[ MAX_PLAYER_NAME ];
GetPlayerName( playerid, z, sizeof z );
return z;
}
PlayerAccount( playerid ) {
new z[ 64 ];
format( z, sizeof z, \"/Users/%s.dat\", GetPlayerNameEx( playerid ) );
return z;
}