Hash FNV con php
Por Luis Peralta
Hace un tiempo conté cómo generar un hash FNV con Python, esta vez le ha tocado al PHP. En principio la traducción debería haber sido directa, salvo porque el cabroncete del PHP y las operaciones sobre bits con número de tamaño mayor a 32 bits no se llevan nada bien. Vamos, es que es básico. Así que solución apoyándonos en la librería GMP y su extensión para PHP.
function FNV1a32_hash($str) {
$prime = "16777619";
$h = "2166136261";
$i = 0;
$s = strlen($str);
while ($i<$s) {
$h = gmp_xor($h, ord($str[$i++]));
$h = gmp_mul($h, $prime);
}
return dechex((float)gmp_strval(gmp_and($h, "0x00000000ffffffff")));
}