Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Encrypt ja Decrypt

Kentti [01.09.2006 21:24:28]

#

Sain idean tähän funkkariin, kun huomasin täällä tuon 1024-bit decrypt-vinkin. Siellä valiteltiin, että se olisi hyödyllisempi, jos sen koodin voisi myös purkaa samalla funkkarilla.
Kehitin siitä oman version (alla), jossa on mahdollisuus sillä tehdyn koodin purkuun.

Listasin jokaisen kirjaimen vastineen taulukkoon $hashit. Huom! Siellä kirjaimen A vastine EI OLE sha1(md5("a")), sillä jos ne menisivät tuollalailla loogisesti, olisi jonkun helppo se purkaa. Tajusin tämän vasta myöhemmin, joten käytin shufflea niiden sekoittamiseen (funktio ei mukana, muuten decryptaus ei toimisi). Merkit ovat http://asciitable.com :in merkit 32-126 + joitain omia.

Funktio perustuu PHP:n omiin funktioihin sha1, md5 ja str_split.
Toimii versiosta 5 eteenpäin, mutta olettaisin, että toimii PHP 4:ssä, jos str_splitin korvaa ja 3:ssa jos otta sha1() pois.

Jos valinnainen parametri decrypt on sallittu, niin funktio yrittää deryptata tekstin. Onnistuu, jos se on kryptattu samalla funkkarilla, samoilla asetuksilla.

salakirjoitin(string merkkijono [, boolean decrypt])

Edit:Laitoin vähän lisää noita merkkejä (lopussa 33 chr():ää). Nyt toimii paremmin, ennen lopetti dekoodauksen rivinvaihtoon mutta ei enää.

<?php

  #################
  # SALAKIRJOITIN #
  #################
  function salakirjoitin($merkkijono, $decrypt=false) {

    /* salakirjoitin(string merkkijono [, boolean decrypt])
     *
     * Toimii PHP 5 eteenpäin.
    */
    #Jokunen muuttuja...#
    $salakirjoitettu_merkkijono = "";
    $decryptattu_merkkijono = "";

    #Hashit:#
    $hashit = array();
        $hashit[" "] = sha1(md5("<"));
        $hashit["!"] = sha1(md5("."));
        $hashit["\""] = sha1(md5("K"));
        $hashit["#"] = sha1(md5("N"));
        $hashit["$"] = sha1(md5("2"));
        $hashit["%"] = sha1(md5("\""));
        $hashit["&"] = sha1(md5("A"));
        $hashit["'"] = sha1(md5("pieniQ"));
        $hashit["("] = sha1(md5("pieniM"));
        $hashit[")"] = sha1(md5("S"));
        $hashit["*"] = sha1(md5("pieniN"));
        $hashit["+"] = sha1(md5("3"));
        $hashit[","] = sha1(md5("Q"));
        $hashit["-"] = sha1(md5("G"));
        $hashit["."] = sha1(md5("pieniC"));
        $hashit["/"] = sha1(md5("T"));
        $hashit["0"] = sha1(md5("O"));
        $hashit["1"] = sha1(md5("pieniD"));
        $hashit["2"] = sha1(md5("@"));
        $hashit["3"] = sha1(md5("9"));
        $hashit["4"] = sha1(md5("/"));
        $hashit["5"] = sha1(md5("pieniS"));
        $hashit["6"] = sha1(md5("7"));
        $hashit["7"] = sha1(md5("Å"));
        $hashit["8"] = sha1(md5("pieniU"));
        $hashit["9"] = sha1(md5(" "));
        $hashit[":"] = sha1(md5("Y"));
        $hashit[";"] = sha1(md5("%"));
        $hashit["<"] = sha1(md5("pieniA"));
        $hashit["="] = sha1(md5("5"));
        $hashit[">"] = sha1(md5("1"));
        $hashit["?"] = sha1(md5("}"));
        $hashit["@"] = sha1(md5("pieniY"));
        $hashit["A"] = sha1(md5("?"));
        $hashit["B"] = sha1(md5("¨"));
        $hashit["C"] = sha1(md5("H"));
        $hashit["D"] = sha1(md5("0"));
        $hashit["E"] = sha1(md5("pieniF"));
        $hashit["F"] = sha1(md5("="));
        $hashit["G"] = sha1(md5("Ö"));
        $hashit["H"] = sha1(md5(";"));
        $hashit["I"] = sha1(md5("\\"));
        $hashit["J"] = sha1(md5("P"));
        $hashit["K"] = sha1(md5("pieniZ"));
        $hashit["L"] = sha1(md5("pieniL"));
        $hashit["M"] = sha1(md5("8"));
        $hashit["N"] = sha1(md5("€"));
        $hashit["O"] = sha1(md5("X"));
        $hashit["P"] = sha1(md5("C"));
        $hashit["Q"] = sha1(md5("["));
        $hashit["R"] = sha1(md5("pieniK"));
        $hashit["S"] = sha1(md5("£"));
        $hashit["T"] = sha1(md5("&"));
        $hashit["U"] = sha1(md5("-"));
        $hashit["V"] = sha1(md5("]"));
        $hashit["W"] = sha1(md5("L"));
        $hashit["X"] = sha1(md5("E"));
        $hashit["Y"] = sha1(md5(")"));
        $hashit["Z"] = sha1(md5("!"));
        $hashit["Å"] = sha1(md5("^"));
        $hashit["Ä"] = sha1(md5("4"));
        $hashit["Ö"] = sha1(md5("*"));
        $hashit["["] = sha1(md5("pieniO"));
        $hashit["\\"] = sha1(md5("pieniG"));
        $hashit["]"] = sha1(md5("§"));
        $hashit["^"] = sha1(md5("pieniR"));
        $hashit["_"] = sha1(md5("J"));
        $hashit["`"] = sha1(md5("pieniÅ"));
        $hashit["a"] = sha1(md5("U"));
        $hashit["b"] = sha1(md5("|"));
        $hashit["c"] = sha1(md5("´"));
        $hashit["d"] = sha1(md5(">"));
        $hashit["e"] = sha1(md5("("));
        $hashit["f"] = sha1(md5("pieniI"));
        $hashit["g"] = sha1(md5("pieniB"));
        $hashit["h"] = sha1(md5("6"));
        $hashit["i"] = sha1(md5("W"));
        $hashit["j"] = sha1(md5("pieniW"));
        $hashit["k"] = sha1(md5("_"));
        $hashit["l"] = sha1(md5("pieniP"));
        $hashit["m"] = sha1(md5("pieniT"));
        $hashit["n"] = sha1(md5("pieniH"));
        $hashit["o"] = sha1(md5(","));
        $hashit["p"] = sha1(md5("I"));
        $hashit["q"] = sha1(md5("B"));
        $hashit["r"] = sha1(md5("pieniV"));
        $hashit["s"] = sha1(md5("V"));
        $hashit["t"] = sha1(md5("+"));
        $hashit["u"] = sha1(md5("#"));
        $hashit["v"] = sha1(md5("Ä"));
        $hashit["w"] = sha1(md5("pieniÄ"));
        $hashit["x"] = sha1(md5("pieniJ"));
        $hashit["y"] = sha1(md5("'"));
        $hashit["z"] = sha1(md5("pieniX"));
        $hashit["å"] = sha1(md5("`"));
        $hashit["ä"] = sha1(md5("R"));
        $hashit["ö"] = sha1(md5("$"));
        $hashit["{"] = sha1(md5(":"));
        $hashit["|"] = sha1(md5("F"));
        $hashit["}"] = sha1(md5("Z"));
        $hashit["~"] = sha1(md5("½"));
        $hashit["´"] = sha1(md5("pieniE"));
        $hashit["€"] = sha1(md5("D"));
        $hashit["¨"] = sha1(md5("{"));
        $hashit["§"] = sha1(md5("M"));
        $hashit["½"] = sha1(md5("~"));
        $hashit["£"] = sha1(md5("pieniÖ"));
    $hashit[chr(0)] = sha1(md5("df"));
    $hashit[chr(1)] = sha1(md5("dsf"));
    $hashit[chr(2)] = sha1(md5("dgv"));
    $hashit[chr(3)] = sha1(md5(" vhn"));
    $hashit[chr(4)] = sha1(md5("!½"));
    $hashit[chr(5)] = sha1(md5("43"));
    $hashit[chr(6)] = sha1(md5("löä*"));
    $hashit[chr(7)] = sha1(md5("()/"));
    $hashit[chr(8)] = sha1(md5("bmf"));
    $hashit[chr(9)] = sha1(md5(";:_"));
    $hashit[chr(10)] = sha1(md5("-:pf"));
    $hashit[chr(11)] = sha1(md5("v fzcaa"));
    $hashit[chr(12)] = sha1(md5(" bgvf"));
    $hashit[chr(13)] = sha1(md5("dfg"));
    $hashit[chr(14)] = sha1(md5("et"));
    $hashit[chr(15)] = sha1(md5("56"));
    $hashit[chr(16)] = sha1(md5("(%/"));
    $hashit[chr(17)] = sha1(md5("6245"));
    $hashit[chr(18)] = sha1(md5("7n"));
    $hashit[chr(19)] = sha1(md5("457b "));
    $hashit[chr(20)] = sha1(md5("34"));
    $hashit[chr(21)] = sha1(md5("124"));
    $hashit[chr(22)] = sha1(md5("!#¤"));
    $hashit[chr(23)] = sha1(md5("@£{"));
    $hashit[chr(24)] = sha1(md5("€"));
    $hashit[chr(25)] = sha1(md5("=)("));
    $hashit[chr(26)] = sha1(md5("()="));
    $hashit[chr(27)] = sha1(md5("123"));
    $hashit[chr(28)] = sha1(md5("562"));
    $hashit[chr(29)] = sha1(md5("hhn"));
    $hashit[chr(30)] = sha1(md5("mnm"));
    $hashit[chr(31)] = sha1(md5("mhm"));
    $hashit[chr(127)] = sha1(md5("hmm"));



    #Ensin tarkastetaan, täytyykö kyseessä oleva merkkijono decryptata vaiko encryptata.#

    if ($decrypt == false) {
        #Ilmeisesti se täytyy encryptata.#

        #Ensin luetaan $merkkijono taulukkoon.#
        $kirjaimet = str_split($merkkijono);

        #Silmukoidaan vähän...#
        foreach ($kirjaimet as $kirjain) {
            #Jos $hashit -taulukossa on vastaava merkki kuin $kirjain, muutetaan se.#
            if (array_key_exists($kirjain, $hashit)) {

                foreach ($hashit as $merkki => $hashi) {
                    if ($kirjain === $merkki) {
                        $salakirjoitettu_merkkijono .= $hashi;
                    }
                }
            } else {
                $salakirjoitettu_merkkijono .= $kirjain;
            }
         }

    } else {
        #Ilmeisesti se täytyy decryptata.#

        #Jälleen luetaan $merkkijono taulukkoon.#
        $kirjaimet = str_split($merkkijono, 40);

        #Silmukoidaanpa taas...#
        foreach ($kirjaimet as $kirjain) {

            foreach ($hashit as $merkki => $hashi) {
                if($kirjain === $hashi) {
                    $decryptattu_merkkijono .= $merkki;
                }
            }
        }
          return "<textarea rows='20' cols='70'>".$decryptattu_merkkijono."</textarea>";
    }

  return "<textarea rows='20' cols='70'>".$salakirjoitettu_merkkijono."</textarea>";

  }
?>

tsuriga [02.09.2006 05:08:20]

#

Funktion on parempi palauttaa pelkät salakirjoitetut tai puretut merkkijonot, jotta funktion käyttäjä voi päättää itse mihin niitä käyttää. Lisäksi salakirjoitus ja purkaminen voisivat olla omissa funktioissaan. Hasheja ei kannata laskea jokaisella funktiokutsulla uudestaan vaan mieluummin lasket nuo summat valmiiksi ja laitat ne sha1(md5("kirjain"))-kutsujen paikalle. Näin säästetään laskenta-aikaa ja ehkäpä myös vältytään salausmenetelmän vuotamiselta kun PHP-koodia ei ajetakaan tulkin läpi. Siitä huolimatta pienellä brute-forcettamisella tuo menetelmä kyllä selviää, joten suosittelen datan salauksessa turvautumaan mcrypt-kirjaston tarjoamiin valmiisiin kryptausmenetelmiin.

Kentti [02.09.2006 08:19:21]

#

Tiedän tuon mcryptin, mutta tämä (tai tämän tapainen, kannattaa vähän parannella sieltä täältä) toimii ilman mitään latauksia, ja myös tuo purkamismahdollisuus, jota sha1 ja md5 ei tarjoa.

Edit: Enkä myöskään tehnyt tuota funktiota se mielessä, että joku laittaisi sen nettiin, lähinnä näin ohjelmana omalla koneella.
No, käyttäköön kukin miten tahtoo..

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta