Ver Mensaje Individual
  #3 (permalink)  
Antiguo 06/07/2013, 12:14
DoHITB
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Respuesta: fallo comunicación JAVA - PHP

Claro, faltaría más.

Pensé que como solo era un typo de codificación no haría falta el tema de la encriptación...

Clase para codificar/decodificar:

Código PHP:
Ver original
  1. class NGC{
  2.     public function __construct(){}
  3.  
  4.     public function encrypt($data, $pass){
  5.          return $this->mergeData($data, $this->mergeData($pass[0], $pass[1], false), true);
  6.     }
  7.  
  8.     public function decrypt($data, $pass){
  9.          return $this->mergeData($data, $this->mergeData($pass[0], $pass[1], false), false);
  10.     }
  11.  
  12.     private function mergeData($p1, $p2, $e = true){
  13.         $minS = $this->getMinS($this->strToDec($p1), $this->strToDec($p2));
  14.         $maxS = $this->getMaxS($this->strToDec($p1), $this->strToDec($p2));
  15.         $min = count($minS);
  16.         $max = count($maxS);
  17.         $ret = array();
  18.  
  19.         for($i=0;$i<$max;$i++)
  20.             if($e)
  21.                 $ret[] = $maxS[$i]+$minS[($i%$min)];
  22.             else
  23.                 if($minS[($i%$min)]>$maxS[$i])
  24.                     $ret[] = $minS[($i%$min)]-$maxS[$i];
  25.                 else
  26.                     $ret[] = $maxS[$i]-$minS[($i%$min)];
  27.  
  28.         return $ret;
  29.     }
  30.  
  31.     private function getMinS($s1, $s2){
  32.         if(count($s1) > count($s2))
  33.             return $s2;
  34.  
  35.         return $s1;
  36.     }
  37.  
  38.     private function getMaxS($s1, $s2){
  39.         if(count($s1) <= count($s2))
  40.             return $s2;
  41.  
  42.         return $s1;
  43.     }
  44.  
  45.     public function decToStr($s){
  46.         $ret = '';
  47.  
  48.         for($i=0;$i<count($s);$i++)
  49.             $ret .= chr($s[$i]);
  50.  
  51.         return $ret;
  52.     }
  53.  
  54.     private function strToDec($s){
  55.         if(is_array($s))
  56.             return $s;
  57.  
  58.         $ret = array();
  59.  
  60.         for($i=0;$i<strlen($s);$i++)
  61.             $ret[$i] = ord($s[$i]);
  62.  
  63.         return $ret;
  64.     }
  65. }
  66. ?>

Cómo codificar:

Código PHP:
Ver original
  1. funcion encode($data, $pass){
  2.     $n = new NGC();
  3.  
  4.     return $n->decToStr($n->encrypt($data, $pass));
  5. }

Cómo decodificar:

Código PHP:
Ver original
  1. function decode($data, $pass){
  2.     $n = new NGC();
  3.  
  4.     return substr($n->decToStr($n->decrypt($data, $pass)), 0, strlen($data));
  5. }

De esta manera, cuando yo llamo a "$GCall->query($q)", se hace una llamada a encode, y cuando llamo a "$GCall->decrypt()", se hace una llamada a decode.

Espero que esto ayude a resolver el problema de una vez por todas...

Un saludo