Pregunta

Tengo un Base32 info hash.por ejemplo, IXE2K3JMCPUZWTW3YQZZOIB5XD6KZIEQ, y necesito convertirlo a base16.

¿Cómo se puede hacer con PHP?

Mi código es este:

$hash32=strtolower($hash32);
echo $hash32; // shows - IXE2K3JMCPUZWTW3YQZZOIB5XD6KZIEQ
$hash32=sha1($hash32);
$hash16=base_convert($hash32, 32, 16);
echo "</br>";
echo $hash16 // shows - 3ee5e7325a282c56fe2011125e0492f6ffbcd467

En mi código de la 16 info basado en hash no es válido..

La validez de la Información de hash es 45C9A56D2C13E99B4EDBC43397203DB8FCACA090

¿Cómo puedo conseguir la validez de la información de hash?

Gracias

¿Fue útil?

Solución

Puedo darle una respuesta con omitiendo voluntariamente gmp_strval(gmp_init(strtoupper($hash32), 32), 16); que sólo funciona con GMP instalado en su servidor.

function convBase($numberInput, $fromBaseInput, $toBaseInput)
{
    if ($fromBaseInput==$toBaseInput) return $numberInput;
    $fromBase = str_split($fromBaseInput,1);
    $toBase = str_split($toBaseInput,1);
    $number = str_split($numberInput,1);
    $fromLen=strlen($fromBaseInput);
    $toLen=strlen($toBaseInput);
    $numberLen=strlen($numberInput);
    $retval='';
    if ($toBaseInput == '0123456789')
    {
        $retval=0;
        for ($i = 1;$i <= $numberLen; $i++)
            $retval = bcadd($retval, bcmul(array_search($number[$i-1], $fromBase),bcpow($fromLen,$numberLen-$i)));
        return $retval;
    }
    if ($fromBaseInput != '0123456789')
        $base10=convBase($numberInput, $fromBaseInput, '0123456789');
    else
        $base10 = $numberInput;
    if ($base10<strlen($toBaseInput))
        return $toBase[$base10];
    while($base10 != '0')
    {
        $retval = $toBase[bcmod($base10,$toLen)].$retval;
        $base10 = bcdiv($base10,$toLen,0);
    }
    return $retval;
}

Esta función, se encontró aquí, "convierte un número arbitrariamente grande de cualquier base a cualquier base".Sólo se necesita convertir de base 32 a base 16, por lo tanto:

base de 32 alfabeto es: ABCDEFGHIJKLMNOPQRSTUVWXYZ234567

$hash32='IXE2K3JMCPUZWTW3YQZZOIB5XD6KZIEQ';
$hash16=convBase($hash32, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', '0123456789ABCDEF');
//$hash16='45C9A56D2C13E99B4EDBC43397203DB8FCACA090'

El problema aquí es que base_convert trate de grandes números.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top