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;
}
Ez hasznos. Jól leírtad grat ;)
Ez hasznos. Jól leírtad grat ;)
Köszönöm. ;)
Szép leírás lett. Grat.
Jeje.. zcmd és sscanf. :D :P
Szép leírás lett. Grat.
Jeje.. zcmd és sscanf. :D :P
Köszi. :D
Jó lett :) Am Még mindig várom a sscanf-os tutot :shy: Már nagyon :shy: mert már nagyon izgatja a fantáziám :D:D
Szép leírás,Gratula. :)
Az md5 hez hasonlóan ez is dekódolható ha úgy vesszük...szerintem.
http://hu.wikipedia.org/wiki/MD5
Az MD5 hashek visszafejtése nem lehetséges, léteznek azonban különbözo on-line is elérheto adatbázisok, melyek kódolt adatokat, és a hozzájuk tartozó hasheket tartalmazzák. Ilyen például az www.md5decrypter.com, mely 2009 áprilisában több, mint 800 000 kódot és visszafejtést tartalmazott.[/quote]
egyébként nem rossz.
Nos igen átkódolja, de nem minden esetben hasznos, mikor eLife foadmin voltam, és egy játékos elfelejtette a jelszót kezdhetett új karit... mert soha az életbe nem tudtam neki megmondani a jelszavát
Nos igen átkódolja, de nem minden esetben hasznos, mikor eLife foadmin voltam, és egy játékos elfelejtette a jelszót kezdhetett új karit... mert soha az életbe nem tudtam neki megmondani a jelszavát
Miért nem \"0-ztad\" a jelszavát?? és pl.: gondolom volt/van rajta jelszóváltoztató parancs és annyi :)
EGyébként akármi dekódolható egy ido után...tök mind1...alapból elm. mindenhova különbözo jelszavadnak kéne lennie me az a legbiztonságosabb. De szerverre olyan jelszóval menj amit ha megtudnak semmit se kezdhetnek vele ;)
Ez a legbiztonságosabb enkódoló algoritmus( eddig ).
Okay i\'ve got 2 question:
Question 1: How do I \"Install\" this?
Just add it like any other plugin.
Question 2: Is it possible to like decrypt the algorytm?
[/quote]
Maybe with several years on a super computer. Whirlpool is one of the most advanced hashing algorithms about (excluding the NIST SHA-3 candidates), I can\'t even find data on collision complexity, let alone collisions (and forget about direct decryption).
The point of a hash is to encrypt data so you can run comparisons on it, but not get the original back, it would be pretty useless if you could. MD5, possibly the most widely used hash, has been long since cracked, you can find a collision on a standard notebook in under a minute.
http://en.wikipedia.org/wiki/Cryptographic_hash_function
http://en.wikipedia.org/wiki/WHIRLPOOL
http://en.wikipedia.org/wiki/MD5
[/quote]
A dicséreteket köszönöm. :)
Ha átírom nullákra, a whirlpool azt is lekódolja rögtön szal mindegy...
Nos igen átkódolja, de nem minden esetben hasznos, mikor eLife foadmin voltam, és egy játékos elfelejtette a jelszót kezdhetett új karit... mert soha az életbe nem tudtam neki megmondani a jelszavát
Gondolom GF.. Simán írhatnál 1 scriptet a GF alapján, amivel dekódolnád a jelszavát.
Egyébként, ha egy szótárat (több 100 ezer szó) ha szerzel, simán csinálhatsz egy jó kis visszafordítót, nem?
Ugyanaz a gyengéje, mint az MD5-nek (szerintem)
Amúgy pedig nem a jelszavát kell \"nullázni\",hanem az (például) 12345 hash-jét betenni a régi hash helyett
Jó leírás én dubd t használok, de azt nem értem h ez miszerint megy :O
Csak hogy egyértelmû legyen. Ilyen szempontból minden titkosítás sebezhetõ, viszont senki se használjon MD5-öt. Ahogy már elõbb írták, nem biztonságos, már fel is törték. Hogy érthetõ legyen: a \"collision attack\" (nevezzük csak ütközésnek) egy olyan támadás, amely során olyan szövegpárokat keresnek, amelynek a kódolt változatuk megegyezik. Ha ez belátható idõn belül lehetséges, akkor a titkosítás nem védett.
Egy 256 bites titkosítás 1.2*10^77 különbözõ eredményt képes létrehozni, ennél több bemenet esetén mindenképpen találunk egy ütközést. Viszont az ú.n. Birthday Attack (akit érdekel keressen rá) használatával 3.1*10^19 bemenet esetén is 75% az esély arra, hogy találunk két azonosan kódolt szóalakot. Természetesen ez csak annyira igaz, mint hogy 365 embernek mindenképpen máskor van a születésnapja. Ez természetesen csak a bitek számából adódik, vagyis ez a maximum, ennél lehet kevesebb.
A probléma az, hogy az MD5 nagyon gyenge, ahogy írta Y_less, akár pár perc alatt is találhatunk két egyezést, SÕT olyan programot is készíthetünk egy programmal, amelyeknek az MD5 checksumja teljesen megegyezik.