Funciones de Encriptación/Desencriptación en PHP (II)
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
No logro encontrar la primera entrega.. y estoy teniendo problemas para hacer funcionar el md5 sobre una tabla que ya encripte con el mismo emd5 pero desde php… Alguna idea, por favor?
necesito saber que funcion debo utilizar para este ejemplo
Alicia y Roberto se han conocido a traves de un chat. Ambos tienen curiosidad
de saber ciertos datos personales del otro, en especial la edad. Ambos tienen temor que si dicen primero
su edad el otro falsee la suya. Proponga un mecanismo criptografico que usando exclusivamente medios
electr´onicos de comunicaci´on le permita a Alicia y Roberto compartir sus edades pero tomando en cuenta sus
aprehensiones.
me pueden ayudar?
gracias
Hola Cryzania.
Lo primero quiero pedirte disculpas en responder tan tarde, pero el trabajo ahora exprime la mayoría de mi tiempo y casi no dispongo para dedicárselo al blog.
Centrándonos en tu consulta te diré que puedes optar por utilizar una de las múltiples clases programadas en php para encriptación/desencriptación.(Encriptación reversible).
Te facilito en link que tengo en mis marcadores:
http://phpclasses.promoxy.com/browse/class/20.html
Salu2
Santi M.
Soy yair llegue aqui de pura coicidencia, mi problema es k el php 4.1.1 no tiene esa libreria, y los k dexscargo tampoco, mdicen k en el php.ini se activa ya lo active, (usando php5). y no funciona ya la libreria dll no existe…………. ayuda
Saludos: Estoy teniendo problemas con la libreria de mhash pues al utilizar cualquiera de las funciones me da el error siguiente:
Fatal error: Call to undefined function mhash_keygen_s2k() in C:\Program Files\xampp\htdocs\CediDocJo\test.php on line 6
Como puedo solucionarlo??? Ya descomentarie la opcion de la extension correspondiente en el php.ini