Funciones php para codificar textos

En programación ya sea php u otro lenguaje es muy útil y aconsejable usar textos codificados para determinadas funcionalidades de seguridad.
Php nos ofrece una serie de funciones para encriptar y crear un hash a partir de una cadena de texto.

crypt()

Funcion para para crear un hash de una cadena. Por defecto usa el algoritmo básico DES-based o un algoritmo alternativo que haya disponible en el sistema. Muchas veces suele tomar algoritmos basados en md5.

Ejemplo de uso:

<?php
$password = 'mi_password';
$hash = crypt($password);
?>

sha1

Calcula el hash sha1 de un string. Utiliza el algoritmo Secure Hash Algorithm 1 (SHA1). SHA-0 y SHA-1 producen una salida resumen de 160 bits (20 bytes) de un mensaje que puede tener un tamaño máximo de 264 bits, y se basa en principios similares a los usados por el profesor Ronald L. Rivest del MIT en el diseño de los algoritmos de resumen de mensaje MD4 y MD5.

Algunos datos de interés:

La resistencia del algoritmo SHA-1 se ha visto comprometida a lo largo del año 2005. Después de que MD5, entre otros, quedara seriamente comprometido en el 2004 por parte de un equipo de investigadores chinos, el tiempo de vida de SHA-1 quedó visto para sentencia.
El mismo equipo de investigadores chinos, compuesto por Xiaoyun Wang, Yiqun Lisa Yin y Hongbo Yu (principalmente de la Shandong University en China), ha demostrado que son capaces de romper el SHA-1 en al menos 269 operaciones, unas 2000 veces más rápido que un ataque de fuerza bruta (que requeriría 280 operaciones). Los últimos ataques contra SHA-1 han logrado debilitarlo hasta 263.

Ejemplo de uso:

<?php
$str = 'mi_contraseña';
echo sha1($str);
?>

sha1_file()

Calcula el hash sha1 de un archivo. Básicamente es lo mismo que sha1() pero en vez de introducir una cadena de texto se introduce el path completo de una cadena de texto.

Ejemplo de uso:

<?php
$ruta_fichero = '/home/pedro/fichero.txt';
echo sha1($ruta_fichero);
?>

md5()

Calcula el hash md5 de un string. Uno de las funciones de encriptación mas usadas. utiliza el algoritmo de “resumen de mensajes” o MD5 Message-Digest Algorithm.

Puedes utilizar el siguiente Generador online md5 para comprobar y testear resultados de cadenas encriptadas en md5.

Puedes usar la siguiente función para generar contraseñas http://www.pedroventura.com/blog_programacion/2010/09/20/funcion-php-generar-password/ para usuarios o cualquier otra funcionalidad. Una vez generada la contraseña, se le aplica el md5() o el sha1().

Existen infinidad de funciones para generar una buena cadena encriptada en md5(), tantas como cada uno lo quiera complicar, añadiendo variables de tiempo, añadiendo intervalos de pulso de cpu, añadiendo “salt”, combinaciones adicionales de palabras y caracteres a la cadena de texto dada, añadiendo expresiones regulares propias e incorporando un sistema de encriptacion adicional, etc..

Mirando en la documentación oficial de php.net, me quedo con la siguiente función, es simple, pero eficaz.
Pero sin duda si queréis usar la función en algún desarrollo en producción la cambiaría para no dejarla igual. Mucha gente ya la habrá copiado tal cual.

<?php 
function eliteEncrypt($string) { 
    // Create a salt 
    $salt = md5($string."%*4!#$;.k~'(_@"); 
    
    // Hash the string 
    $string = md5("$salt$string$salt"); 
    
    return $string; 
} 
?> 

A pesar de ser una de las funciones para codificar o encriptar textos más usadas, ciertas investigaciones han revelado vulnerabilidades que hacen cuestionable el uso futuro del MD5. En agosto de 2004, Xiaoyun Wang, Dengguo Feng, Xuejia Lai y Hongbo Yu anunciaron el descubrimiento de colisiones de hash para MD5. Su ataque se consumó en una hora de cálculo con un clúster IBM P690.
Aunque dicho ataque era analítico, el tamaño del hash (128 bits) es lo suficientemente pequeño como para que resulte vulnerable frente a ataques de «fuerza bruta». El proyecto de computación distribuida MD5CRK arrancó en marzo de 2004 con el propósito de demostrar que MD5 es inseguro frente a uno de tales ataques, aunque acabó poco después del aviso de la publicación de la vulnerabilidad del equipo de Wang.
Debido al descubrimiento de métodos sencillos para generar colisiones de hash, muchos investigadores recomiendan su sustitución por algoritmos alternativos tales como SHA-1 o RIPEMD-160.

hash()

Genera un valor cifrado en base a un string.
En esta función primero hay que especificar que encriptacion queremos usar, y como segundo valor indicamos la cadena de texto.

Ejemplo para encriptar un texto en base al algoritmo ripemd160

<?php
echo hash('ripemd160', 'Codificando un texto.');
?>

También podemos usar sha1 o md5

<?php
$id = rand();
$salt ="Un texto aleatorio que queramos para añadir mas seguridad";
$codigo = hash("sha512", $id.$salt);
?>

La lista actual de sistema de encriptacion que soporta la funcion hash() es la siguiente:

[0] => md4
[1] => md5
[2] => sha1
[3] => sha256
[4] => sha384
[5] => sha512
[6] => ripemd128
[7] => ripemd160
[8] => whirlpool
[9] => tiger128,3
[10] => tiger160,3
[11] => tiger192,3
[12] => tiger128,4
[13] => tiger160,4
[14] => tiger192,4
[15] => snefru
[16] => gost
[17] => adler32
[18] => crc32
[19] => crc32b
[20] => haval128,3
[21] => haval160,3
[22] => haval192,3
[23] => haval224,3
[24] => haval256,3
[25] => haval128,4
[26] => haval160,4
[27] => haval192,4
[28] => haval224,4
[29] => haval256,4
[30] => haval128,5
[31] => haval160,5
[32] => haval192,5
[33] => haval224,5
[34] => haval256,5

Para más informacion consultar la documentacion oficial de php en php.net

3 opiniones en “Funciones php para codificar textos”

  1. Pingback: Fundamentos de codificación PHP

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *