Kódování v PHP

Klíčová slova: gzdeflate, gzinflate, MD5, CRYP, PHP, Coded, Decoded, BASE64, Kodovani, Dekodovani, base64_encode, base64_decode
Rubrika: PHP

Následující článek Vás rychle seznámí s použitím některý základních kódovacích a dekódovacích algoritmů, které se dají použít v PHP.

Tam i zpět bez problémů

Pro některé typy operací potřebujete použít kódování bezeztrátové. To je takové kódování, při kterém je možné získat původní řetězec pomocí dekódovací funkce jednoznačně zpět.

 K tomu kódování lze v PHP využít například jednoduché kódování MIME BASE64. Toto kódování je například používáno u emailových klientů, kteří takto kódují binární data (přílohy) pro bezpečnější průchod internetem. Výsledný zakódovaný text je však větší zhruba o 33%.

 Následující příklad používá právě kódování/dekódování zadaného textu pomocí tohoto typu kódování:

     <?
        //--- kodovani - base64 ---
        $obsah = "text který chcete zakodovat!";
        $obsah_coded = base64_encode($obsah);
        // výsledkem je následující text: dGV4dCBrdGVy/SBjaGNldGUgemFrb2RvdmF0IQ==
        // --- dekodovani - base64 ---
        $obsah_decoded = base64_decode($obsah_coded);

        echo "Původní text: $obsah <br> ";
        echo "Kodováno: $obsah_coded <br> ";
        echo "Dekódováno: $obsah_decoded <br> ";
    ?>       

Pokud máte k dispozici v PHP knihovnu ZLIB, lze ke zakódování/dekódování použít funkce gzdeflate, gzinflate.

    <?
        //--- Komprese pomocí Zlib Compression Functions ---
        $obsah = "text který chcete zakodovat pomocí Zlib Compression Functions";
        $obsah_coded = gzdeflate($obsah,9);
        // výsledkem je následující text: dGV4dCBrdGVy/SBjaGNldGUgemFrb2RvdmF0IQ==
        // --- Dekomprese pomocí Zlib Compression Functions ---
        $obsah_decoded = gzinflate($obsah_coded);

        echo "Původní text: $obsah <br> ";
        echo "Kodováno: $obsah_coded <br> ";
        echo "Dekódováno: $obsah_decoded <br> ";
    ?>

Vložený text je ve své v první fázi zkomprimovaný metodou gzdeflate a následně dekomprimován funkcí gzinflate. Nejde tedy o kódování v pravém smyslu slova, ale svůj účel to plní. Výsledný zakódovaný text je také poměrně menší než v předchozím případě u funkce BASE64.

Není cesty zpět

Druhou oblastí využití kódovacích algoritmů je naprosto jedinečné zakódování výchozího řetězce, u kterého nepotřebujete (nebo raději ani nechcete) vědět původní řetězec. Tyto funkce nemají žádné standardní dekriptovací metody. Tímto způsobem se například mohou šifrovat hesla pro ukládání do databáze.

Pro jednosměrné zakódování vstupního řetězce se asi nejvíce využívá funkce MD5. Ta je založena na stejnojmenném algoritmu The MD5 Message-Digest Algorithm. Jeho jednoduché využití je vidět na následujícím příkladu:

    <?
        //--- kryptování pomocí MD5 ---
        $password = "heslo_MD5";
        $password_crypt = md5($password);

        echo "Původní heslo: $password <br> ";
        echo "Kryptováno: $password_crypt <br> ";
    ?>   

Pokud chcete heslo někde veřejně vystavovat/posílat nepočítejte s tím, že algoritmus MD5 je zcela neprůstřelný. Existují jak databáze hesel MD5 tak různé decryptory, které umožní najít původní heslo nebo např. několika variant možného původního hesla.

Pro jednosměrné kryptování lze využít dále například funkci CRYPT. Tato funkce využívá standardní Unixovské šifrovací metody DES. Některé servery umožňují pomocí funkce CRYPT využití i jiných implementovaných šifrovacích metod (CRYPT_STD_DES, CRYPT_EXT_DES, CRYPT_EXT_DES, CRYPT_MD5, CRYPT_BLOWFISH). Standardní použití funkce CRYPT je vidět na následujícím příkladu:

     <?
        //--- kryptování pomocí metody CRYPT ---
        $password = "heslo";
        $dynam_salt = "ncg59cxc695n9c5578xg6f4vyu68ku4x";
        $dynam_salt = substr($dynam_salt, 0, CRYPT_SALT_LENGTH );
        $password_crypt = crypt($password, $dynam_salt);

        echo "Původní heslo: $password <br> ";
        echo "Dynamický salt: $dynam_salt <br> ";
        echo "Kryptováno: $password_crypt <br> ";
       
        if (crypt($password, $dynam_salt)=='ncCc8gRV1H6ic') echo "Test hesla OK<br> ";
        else "Test hesla FALSE<br> ";
    ?>     

Pro dosažení větší bezpečnosti můžete algoritmy různě kombinovat nebo volat rekurzivně nad jedním vstupním řetězcem. Pokud budete využívat jakýkoli kódovací mechanizmus, nezapomínejte na skutečnost,  že každý systém je prolomitelný.

zdroj internet: PHP.NET

 

Autor: Jiří Provazník
Datum vydání: 22.08.2007 | Zobrazeno: 12063
Permanentní odkaz: Kódování v PHP

Komentáře (6)
Čo takto http://www.md5decrypter.com/ ?
Autor:Marco
Ano to je přesně to co píšu o několik řádek výše. MD5ka není zcela bezpečná.
Autor:JP
Díky za článek! Pavel
Autor:Pavel
xx xxxxxxxxxx xxxxxxxxx
Autor:x
Super člának! Během necelých pěti minut jsem se dozvěděl, co opravdu potřebuju. Díky!
Autor:Tomáš
@Marco: a co takhle kdyz mas v md5ce ulozeny i neco jinyho nez jenom heslo?
Autor:Drahomír Hanák
Přidej vlastní komentář:
Následující (běžně neviditelná) pole slouží pro vnitřní identifikaci systému. Pokud je vyplníte nebude možné váš požadavek na straně serveru zpracovat:
URL:
contents:
Website:
Pro odeslání vašeho komentáře použijte tlačítko "Odeslat". Toto tlačítko nepoužívejte:

Následující položky je vhodné vyplnit:
Jméno :
Email :
Web :
Místo :
Hodnocení:
Hodnocení jako pomocí hvězdiček
1/5= nejhorší, 5/5=nejlepší