xor

neon 14.02.04 18:35

Esimerkki xor-salauksen toteuttamisesta php:llä

 Tekstiversio  Arvo: 0 (3 ääntä)  Äänestä: +  -
<?PHP
/*
lyhyesti xorista:

oletetaan data seuraavaksi:
101011100
ja avain:
110
Jotta cryptaus toimisi tulee avaimesta tehdä datan pituinen.
uusi avain:
110110110

suoritetaan operaatio
101011100
110110110
011101010 (tulos)

heikkouksia:

Jos data on pitkä ja avain lyhyt, niin voidaan cryptatusta
datasta etsiä toistuvuuksia, joiden avulla voidaan
paljastaa avain tai toisin päin.
Ei verrannolinen ns. "todellisiin" eli laskennallisiin salakirjoituksiin.

*/


function repeat($data,$len)
{   
    $temp = str_repeat($data,(int)($len/strlen($data)));
    $last = $len - strlen($temp);
    $temp .= substr($data,0,$last);
    return $temp;
}

function crypt2($data,$key)
{
    $key_len  = strlen($key);
    $data_len = strlen($data);
    /*
          Toistetaan joko aivain tai data niin monta kertaa,
          että lyhyempi on pidemmän pituinen (molemmat
          saman pituisia.
    */

    if($key_len > $data_len) {
        $data = repeat($data,$key_len);
    } else {
        $key = repeat($key,$data_len);
    }
     /*
           käytetään xor (^)  bittioperaattoria
     */

    return $data^$key;
}
?>

Crudus 21:55 15.2.04 
olis ehkä hieman saanut olla kommentteja, en nyt tajunnut yhtään mitä tässä tapahtuu...
uffis 10:37 8.6.04 
suoritetaan operaatio
101011100
110110110
111111110 (tulos)

Jos ymmärsin oikein, että tuossa on käytetty XORia, niin tuo tulos ei ole oikein. XOR tarkoittaa jompaa kumpaa mutta ei molempia, eli oikea tulos olisi 011101010.
eis 14:02 1.7.04 
jos tosiaan olisi
101011100 alkuperäinen
110110110 avain
111111110 kryptattuna

ja laskettaisiin kommentin logiikalla, niin eihän tuosta voisi purkaa alkuperäistä lukua millään avaimenkaan kanssa?
Alkuperäinen voisi olla tuo
101011100
tai vaikka
001001000