leikkaa ja liimaa

raspi 25.12.01 09:39

Tee yhdestä tiedostosta 2 tiedostoa (xorrattu randomilla)

 Tekstiversio  Arvo: 0 (0 ääntä)  Äänestä: +  -
<?php
/*
(c) raspi 2001
ver. 0.1 (ei niin käyttäjäystävällinen)

originaalista tiedostosta tehdään kaksi randomilla xorrattua tiedostoa.
kun nämä kaksi xorrattua tiedostoa yhdistää niin saa originaalin datan.

dataa ei saa palautettua muuten kuin näillä kahdella tiedostolla.
Jos saat vain toisen tiedoston, et voi purkaa sitä mitenkään (kaikki on randomilla arvottu).

eräänlainen salaus tämäkin.. :)

voihan nämä kaksi tiedostoa vielä salata muullakin tavalla tämän lisäksi (esim. rot) :)
*/


function leikkaa ($tied) {
  $tall1 = "leikattu.1.txt";
  $tall2 = "leikattu.2.txt";

  $tiedosto = fopen($tied, "r");
  flock($tiedosto, 1);
  while(!feof($tiedosto)) {
    $data .= fread($tiedosto, 128);
  }
  flock($tiedosto, 3);
  fclose($tiedosto);

  $tiedosto1 = fopen($tall1, "w");
  $tiedosto2 = fopen($tall2, "w");
  flock($tiedosto1, 2);
  flock($tiedosto2, 2);

  for($i = 0; $i < strlen($data); $i++) { // luetaan kirjain kerrallaan
    $o = ord(substr($data, $i, 1)); // kirjain muutetaan numeroksi
    $rnd = mt_rand(1, 255)// luodaan arvottu numero

    $s0 = $o ^ $rnd; // originaali numero xorrataan arvotun numeron kanssa
    $s1 = $s0 ^ $o; // originaalin ja arvotun kanssa xorrattu numero xorrataan originaalin kanssa

    $c1 = chr($s0); // muutetaan numero takaisin kirjaimeksi
    $c2 = chr($s1); // -||-

    fwrite($tiedosto1, $c1);
    fwrite($tiedosto2, $c2);
  }
 
  flock($tiedosto1, 3);
  flock($tiedosto2, 3);
  fclose($tiedosto1);
  fclose($tiedosto2);
}

/* -------------------------------------------------- */

function liimaa ($tied1, $tied2) {
  $tall = "liimattu.txt";

  $tiedosto1 = fopen($tied1, "r");
  flock($tiedosto1, 1);
  while(!feof($tiedosto1)) {
    $data1 .= fread($tiedosto1, 128);
  }
  flock($tiedosto1, 3);
  fclose($tiedosto1);

  $tiedosto2 = fopen($tied2, "r");
  flock($tiedosto2, 1);
  while(!feof($tiedosto2)) {
    $data2 .= fread($tiedosto2, 128);
  }
  flock($tiedosto2, 3);
  fclose($tiedosto2);

  $tiedosto = fopen($tall, "w");
  flock($tiedosto1, 2);

  for($i = 0; $i < strlen($data1); $i++) { // luetaan kirjain kerrallaan
    $s0 = ord(substr($data1, $i, 1)); // kirjain muutetaan numeroksi
    $s1 = ord(substr($data2, $i, 1)); // kirjain muutetaan numeroksi
    $xorrattu = $s0 ^ $s1;
    $lopp = chr($xorrattu); // num -> kirj
    fwrite($tiedosto, $lopp);
  }

  flock($tiedosto1, 3);
  fclose($tiedosto);

}

// usage:
// leikkaa("testi.txt");
// liimaa("leikattu.1.txt", "leikattu.2.txt");
?>

pekkajarvinen@kolumbus.fi

konst-a 17:05 25.1.05 
Xor"salauksia" kutsutaan enemmänkin avauksiksi, erittäin arvattava keino. Miksi käyttää tällaista salausta kun php on itsessään täynnä hyviä salausalgoritmeja?