Neten azt olvasom, hogy az MD5 karakterkódolás csak egy irányú. De akkor hogyan működnek az online dekódolók illetve birok-e csinálni én Php-ban egy ilyen függvényt?
Az ilyen és ehhez hasonló oldalakra gondolok.
Példa hash: d4f7244fb96d61178079a60400da9511
Fenti linken már meg is kaptam, hogy az eredeti string "capaci".
md5($myString). Ilyen egyszerű odafele.
Arra lennék kíváncsi van e valami megoldás Php-ban arra, hogy egy MD5 karakterkódolt stringnek megkapjam mi volt az eredeti kódolás előtti szövege.
md5_reverse($hashedString) - valami ilyesmi. Persze konkrétan ez tudom, hogy nem létezik.
Tudom, hogy mondjuk egy bejelentkezésnél a felhasználó által begépelt stringet kódolják, majd ezt összehasonlítják az adatbázisban lévő, már kódolt stringel. ÉS ha passzol akkor bejelentkeztet az oldalra.
Amit én generáltam arra nem talál eredményt
49f91f0582791de9d7e5515168b33443
Azaz csak szótárazik visszafelé?
MD5 helyett inkább SHA2-t használj. Lehetőleg SHA-384 et.
Erről a checksum ról még nem hallottam.
Visszatérve. Php-ban meg lehet oldani a visszafejtést?
#3
Már a sha-256 és sha-512 re is találtak elvi törési lehetőséget. Lásd táblázat:
Egyedül a sha-384 tartja magát (úgy ahogy). Az sha3 at pedig nem támogatja semelyik windows. (de a sha-384 támogatott win7 óta, és androidon is)
MD5 meg már könnyen átverhető, sőt az sha1 is csak nehezebben.
Azért egyirányú, mert nem lehet biztosan megállapítani, hogy mi volt a bemenet. A kulcsszó a "biztosan". Mondok egy példát. (Nem, nem az MD5 kódolását használom, de talán érthető lesz.) Tegyük fel, hogy összeadok két számot. Az eredmény: 15. Menyik két számot adtam össze? Nem lehet egyértelműen megállapítani. De tegyük fel, hogy írok egy olyan PHP-szkriptet, ami "megpróbálja kitalálni". És azt adja válaszul, hogy bizony a 10-et és az 5-öt adtam össze. Igaza volt? Nem lehet biztosan tudni. Összeadhattam a 10-et és az 5-öt is, de akár a 8-at meg a 7-et is.
MD5-nél - meg az összes hasonló kódnál, ellenőrzőösszegnél - ez a helyzet. Ha úgy tetszik, azt is mondhatjuk, hogy ugyanazt a kimenetet több lehetséges bemenet is okozhatja. Nem meglepő, hiszen tetszőleges hosszúságú adatfolyamokból állít elő egy fix, 128 bit hosszúságú adatfolyamot.
De ez nem is arra való, hogy titkosíts vele valamit. Arra viszont tökéletes, hogy egy fájl sértetlenségét ellenőrizzük. Ez sem 100%-os megoldás, de a gyakorlatban az, hogy két fájlnak - kivéve, ha célirányosan manipulálták - ugyanaz legyen az MD5-összege, nullához közelít a valószínűsége.
Szia!
A 7-es válaszoló már szépen leírta, hogy hogyan működik az MD5, viszont azt még nem nagyon, hogy az online visszafejtő oldalak hogyan működnek.
Nagyon egyszerű egyébként a megfejtés: fogták a teljes angol szótárat, mindegyik szóhoz meghatározták az MD5 hash értékét, és elmentették. Ha egy összetettebb magyar kifejezést választasz, pl "EztNemFogodKitalálni", ehhez az MD5 érték "b1049570481a3f95ed2e254c642c34f7". Na ezt már nem tudja visszafejteni az általad linkelt oldal se.
Ha jelszavak tárolására használnád az MD5-öt, akkor egyébként két technika van, ami az ilyen szótár alapú támadásokat kiküszöböli:
- az egyik az úgynevezett "sózás" (salting). Itt a jelszó mellé generálunk egy véletlenszerű karaktersorozatot, és hozzáfűzzük a jelszóhoz, és ebből számolunk MD5-öt. Ha pl egy felhasználó "AppleTree" jelszóval regisztrál, akkor generálunk hozzá egy olyan szöveget, hogy "sworigt465". Ekkor az MD5("AppleTree") érték helyett MD5("AppleTreesworigt465") - és ezt valószínűleg semmilyen szótár nem tartalmazza.
- a másik megoldás, hogy egyszerűen nem MD5-öt használsz, ma a PHP beépített password_hash függvényét érdemes használni, ez jelenleg a BCrypt nevű algoritmust használja a háttérben.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!