Encriptar PHP, Algoritmos de encriptacion

Encriptar, php nos provee de algoritmos que hacen esta tarea relativamente fácil.
En este artículo podrá encontrar información sobre los distintos algoritmos de encripación como utlizarlos , velocidad y desencriptación de los mismos cuando es posible.

Encriptar PHP

Cuando hablamos de algoritmos de encriptación tenemos dos tipos los generadores de hash y los encriptadores, los generadores de hash generan un hash en base a un texto o clave que luego no es posible desencripar, a diferencia de los encriptadores que utilizan una semilla ( frase o clave ) para encriptar un texto y luego es posible desencriptarlo usando la misma semilla o frase.

Los generadores de hash son los mas interesantes , también erroneamente son llamados encriptadores, digo erroneamente ya que solo son algoritmos de una via , como ya dijimos no se puede desencriptar lo que se hashea.

Estos generadores son ideales para distintas tareas , como por ejem en un control de sesion de usuario donde se hashea una clave y se guarda el hash en la base de datos luego cuando el usuario ingresa nuevamente introduce la clave para loguearse, el hash se vuelve a generar y se compara con el hash almacenado en la base de datos, si los hash son iguales se le da acceso. De esta forma se maximiza la seguridad ya que si algún hacker llegara a robar la base de usuarios no tendría acceso a las claves que muchas veces suelen ser las mismas que usan para todo (email, cuentas de banco etc).

Si el usuario necesitara recuperar la clave en caso de perdida o lo que fuere ,simplemente se le genera una clave nueva.

Estas técnicas para encriptar php o generar hashes para passwords se utiliza en los sitios mas reconocidos, y simplemente nos damos cuenta cuando como ya dijimos intentando recuperar la contraseña , nunca se nos muestra, si no que se nos envia un correo con un link para generar una clave nueva.

Para probar los distintos encriptadores y generadores de hash para encriptar php puedes visitar MD5 Decrypt una excelente página donde puedes ejecutar todos los algoritmos de encriptación y hash para ver como funcionan.

Algoritmos disponibles para encriptar en php

* md5() – Uno de los mas usados , El MD5 genera, a partir de un texto de cualquier longitud, una clave de 128 bits (32 caracteres) única para ese texto. Con sólo cambiar un carácter, se obtiene un valor muy distinto en el cálculo del MD5.
La clave que genera contiene siempre 32 caracteres, sin importar el largo del mensaje, el cual puede ser mayor o menor a 32 caracteres
Ejem:

echo ‘Password: ‘.md5(‘hola’); //Password:  4d186321c1a7f0f354b297e8914ab240

* SHA1() – Calcula el sha1 hash de una cadena, generando asi una clave de 160 bits (40 caracteres). Es mas seguro que el md5 aunque para almacenamiento de contraseñas se utiliza con mayor frecuencia el anterior.Es una version mejorada el algoritmo SHA (Secure Hash Algorithm)
Ejem:

echo ‘Password: ‘.sha1(‘hola’); //Password:99800b85d3383e3a2fb45eb7d0066a4879a9dad0

* sha1_file() – Calcula el sha1 de un archivo, muy util para no tener que estar abriendo archivos para encriptarlos simplemente se llama la funcion y listo , el resultado es el mismo que el sha1
Ejem

echo ‘File Hash: ‘.sha1_file(‘t.php’) // Hash: c8950f3a13b91e60c819406cccdc7bb7c585fd18

* crc32() – Calcula el crc32 polinomial de una cadena La comprobación de redundancia cíclica (CRC) es un tipo de función que recibe un flujo de datos de cualquier longitud como entrada y devuelve un valor de longitud fija como salida.
Esta función se usa por lo general para validar la integridad de los datos que seran trasmitidos o que seran almacenados, lo que se suele hacer es generar el crc32 de un texto antes de enviarlo luego se envia por la web o por donde sea el texto + la clave crc32, al llegar a destino se reciben los dos, se aplica nuevamente esta funcion al texto  y si la clave generada coincide con la clave crc32 generada inicialmente, el mensaje es correcto, caso contrario se solicita la retrasmision.
El término suele ser usado para designar tanto a la función como a su resultado.
Ejem

print ‘crc: ‘.crc32(‘Mensaje a enviar’);   //crc: 679863892

* hash() – Genera un valor hash
* crypt - Retorna una clave encriptada utilizando el estandar Unix Basado en encriptación DES o alternando algoritmos disponibles en el sistema operativo.
Ejem

print crypt(‘hola’); // $1$2o3L0Ym.$2GgYu7rpuaOhHZaBVRY0E0

Algoritmos Simetricos ( Encriptación y Desencriptación)
Queda pendiente la explicacion y los ejemplos para mas adelante, igualmente dejo algunos links donde se pueden bajar los dos mas conocidos que son el RSA y el
DES
RSA
Código RSA

DES
Código DES

IDEA
Hash

De que depende elegir un algoritmo u otro ?
Bueno depende del problema que quieras resolver, los algorimos mas seguros por lo general son los mas lentos, y los menos seguros los mas rápidos, la idea es
buscar uno que cumpla con las espectativas de seguridad que requiera tu página.
buscando en la web encontré en php.net , una comparación de las velocidades de algoritmos

Resultados: (in microsegundos)
1. md4 5307.912
2. md5 6890.058
3. crc32b 7298.946
4. crc32 7561.922
5. sha1 8886.098
6. tiger128,3 11054.992
7. haval192,3 11132.955
8. haval224,3 11160.135
9. tiger160,3 11162.996
10. haval160,3 11242.151
11. haval256,3 11327.981
12. tiger192,3 11630.058
13. haval128,3 11880.874
14. tiger192,4 14776.945
15. tiger128,4 14871.12
16. tiger160,4 14946.937
17. haval160,4 15661.954
18. haval192,4 15717.029
19. haval256,4 15759.944
20. adler32 15796.184
21. haval128,4 15887.022
22. haval224,4 16047.954
23. ripemd256 16245.126
24. haval160,5 17818.927
25. haval128,5 17887.115
26. haval224,5 18085.002
27. haval192,5 18135.07
28. haval256,5 18678.903
29. sha256 19020.08
30. ripemd128 20671.844
31. ripemd160 21853.923
32. ripemd320 22425.889
33. sha384 45102.119
34. sha512 45655.965
35. gost 57237.148
36. whirlpool 64682.96
37. snefru 80352.783
38. md2 705397.844

This entry was posted in Algoritmos, Encriptar PHP. Bookmark the permalink.

Deja un comentario

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

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>