En esta segunda entrega vamos a ver las funciones MHASH. Sí, es cierto que comenté en la anterior entrega que veríamos las funciones de la librería MCRYPT, pero es que había pasado por alto estas funciones.

Las funciones hash son funciones que encriptan de un solo lado. Algunas de los algoritmos de encriptación que ya conocemos son MD5, SHA1 y CRC (que vienen por defecto en la instalación más típica de PHP). MHASH, a parte de esos tres también incluye varios algoritmos más como son:

  • Adler32 (MHASH_ADLER32)
  • Crc32 (MHASH_CRC32)
  • Crc32B (MHASH_CRC32B)
  • Gost (MHASH_GOST)
  • Haval128 (MHASH_HAVAL128)
  • Haval160 (MHASH_HAVAL160)
  • Haval192 (MHASH_HAVAL192)
  • Haval256 (MHASH_HAVAL256)
  • Md4 (MHASH_MD4)
  • Md5 (MHASH_MD5)
  • Ripemd160 (MHASH_RIPEMD160)
  • Sha1 (MHASH_SHA1)
  • Sha256 (MHASH_SHA256)
  • Tiger (MHASH_TIGER)
  • Tiger128 (MHASH_TIGER128)
  • Tiger160 (MHASH_TIGER160)

Podemos elegir cualquiera de estos algoritmos para encriptar los datos.

MHash solo contiene cinco funciones con las que podemos calcular el hash de los datos.

mhash
Genera un hash a partir de otro hash y una cadena
Ejemplo

<?php
$entrada = 'Texto de Entrada';
$hash = mhash(MHASH_MD5, $entrada);
echo 'El valor hash es '.$hash.'<br />n';
$hash = mhash(MHASH_MD5, $entrada, 'Jefe');
echo 'El valor hmac es '.bin2hex ($hash).'<br />n';
?>

Ejemplo Online:
http://www.martinpulido.com/lab/php/encriptado/mhash.php

mhash_count
Obtiene el valor más alto de hash disponible.
Ejemplo

<?php
$max_hash = mhash_count();
echo 'El máximo hash es '.$max_hash;
?>

Ejemplo Online
http://www.martinpulido.com/lab/php/encriptado/mhash/mhash_count.php

mhash_get_block_size
Devuelve el valor del hash determinado
Ejemplo

<?php
$max_hash = mhash_count();
echo 'El máximo hash es '.$max_hash.'<br/>';
$tamanio_hash = mhash_get_block_size($max_hash);
echo 'Tamaño del hash '.$tamanio_hash;
?>

Ejemplo Online
http://www.martinpulido.com/lab/php/encriptado/mhash/mhash_get_block_size.php

mhash_get_hash_name
Sirve para obtener el nombre del hash utilizado
Ejemplo

<?php
$hash = MHASH_MD5;
echo mhash_get_hash_name($hash);
?>

Ejemplo Online
http://www.martinpulido.com/lab/php/encriptado/mhash/mhash_get_hash_name.php

mhash_keygen_2k
Genera una llave partiendo del hash, una contraseña, el sal y el numero de bytes.
Más información en la pagina de PHP
Ejemplo

<?php
$key = mhash_keygen_s2k (MHASH_MD5, 'password', 12345678, 1234);
echo $key;
?>

Nota: Esto nos mostrara por pantalla más y más caracteres ‘raros’ (Binario, pero no unos ni ceros). Si deseamos verla en formato ‘normal’ añadiremos la función bin2hex

<?php
$key = mhash_keygen_s2k (MHASH_MD5, 'password', 12345678, 1234);
echo bin2hex($key);
?>

Ejemplo Online:
http://www.martinpulido.com/lab/php/encriptacion/mhash_keygen_s2k.php