<?php
/*--------------------------------------------------------------------------------

  Archivo: eccryption.php
  Autor: Francisco Echarte [ patxi@eslomas.com ]
  Fecha: 2001-07-25

  Clases: Crypter
  
  Objetivo:
  Clase que ofrece funciones para la encriptación y desencriptación

  Observaciones:
  Basado en una observación vista en la página de md5 en php.net
  Al constructor hay que pasarle la palabra utilizada para la encriptación.
  
  Modificaciones:

  2001-12-14 : Made it compatible with moregroupware
  

  LICENCIA
  ========

     Copyright (c) 2001 Francisco Echarte <patxi@eslomas.com>
     This software is released under the GNU Public License
     Please see http://www.gnu.org/copyleft/lgpl.txt for licensing details!
  

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

class Crypto{

   var $key;


   /*----------------------------------------------------------------------
     Entrada: $clave => clave que va a utilizar el crypter
     Salida : nada
     Efecto : es el constructor de la clase.
     ----------------------------------------------------------------------*/
   function Crypto($clave=""){
      $this->key = $clave;
   }

   /*----------------------------------------------------------------------
     Entrada: $clave => clave que va a utilizar el crypter
     Salida : nada
     Efecto : actualiza la clave
     ----------------------------------------------------------------------*/
   function setKey($clave){
      $this->key = $clave;
   }
   
   function keyED($txt) { 
      $encrypt_key = md5($this->key); 
      $ctr=0; 
      $tmp = ""; 
      for ($i=0;$i<strlen($txt);$i++) { 
         if ($ctr==strlen($encrypt_key)) $ctr=0; 
         $tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1); 
         $ctr++; 
      } 
      return $tmp; 
   } 
   
   function encrypt($password,$txt){ 
      $this->setKey($password);   
      srand((double)microtime()*1000000); 
      $encrypt_key = md5(rand(0,32000)); 
      $ctr=0; 
      $tmp = ""; 
      for ($i=0;$i<strlen($txt);$i++){ 
         if ($ctr==strlen($encrypt_key)) $ctr=0; 
         $tmp.= substr($encrypt_key,$ctr,1) . 
             (substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1)); 
         $ctr++; 
      } 
      return base64_encode($this->keyED($tmp)); 
   } 

   function decrypt($password,$txt) {
      $this->setKey($password);
      $txt = $this->keyED(base64_decode($txt)); 
      $tmp = ""; 
      for ($i=0;$i<strlen($txt);$i++){ 
         $md5 = substr($txt,$i,1); 
         $i++; 
         $tmp.= (substr($txt,$i,1) ^ $md5); 
      } 
      return $tmp; 
   } 

}
?>
