Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: :ohk<any> en 27 Marzo 2022, 13:05 pm



Título: Convertir valor a base 16, resultados diferentes
Publicado por: :ohk<any> en 27 Marzo 2022, 13:05 pm
Buenas a todos,

Tengo esta cadena que debo convertir a base 16.

000012345678920190113163721231000011101000000000100001

Usando Java con esta funcion:

Código
  1. System.Globalization.NumberStyles.HexNumber

Tengo este resultado:

8727F63A15F8976591FDDE5B387C5D015A29E06A1

Ahora bien, replicando lo mismo en PHP, al convertir el mismo valor a base 16 en PHP obtengo un resultado diferente:

303030303132333435363738393230313930313133313633373231323331303030303131313031303030303030303030313030303031

Y si este resultado le hago la conversion inversa tambien obtengo el resultado inicial.

¿Porqué pasa esto?

Porque la misma conversion en 2 lenguajes diferentes dan resultados diferentes?

Estoy haciendo algo mal?

Intente convertir usando estas funciones:

Código
  1.  

Incluso con esta funcion que encontre en internet:

Código
  1. private function strhex($string) {
  2.        $hexstr = unpack('H*', $string);
  3.        return array_shift($hexstr);
  4.    }
  5.  

Agradezco cualquier ayuda.

Saludos cordiales!


Título: Re: Convertir valor a base 16, resultados diferentes
Publicado por: :ohk<any> en 27 Marzo 2022, 21:14 pm
Bueno, lo he resuelto, por si les pasa en la vida aca dejo la solución.

1ro asegurarse que tienen habilitado el:

Código:
[bcmath]

bcmath.scale = 2

en el archivo php.ini

Después de eso usamos esta función:

Código
  1. /**
  2.      * @param $number
  3.      * @return string
  4.      */
  5.    private function dec2hex($number)
  6.    {
  7.        $hexvalues = array('0','1','2','3','4','5','6','7',
  8.            '8','9','A','B','C','D','E','F');
  9.        $hexval = '';
  10.        while($number != '0')
  11.        {
  12.            $hexval = $hexvalues[bcmod($number,'16')].$hexval;
  13.            $number = bcdiv($number,'16',0);
  14.        }
  15.        return $hexval;
  16.    }
  17.  

Lo llamamos así:

Código
  1. return strtoupper($this->dec2hex((string)$valor));
  2.  

Y problema solucionado.

Saludos!