¡Qué tal! Eduardo Rodríguez de este lado del monitor para hablarles un poco acerca de como validar la integridad de los datos recibidos en una llamada http mediante SHA-512, pero antes no olvides pasarte por mi articulo anterior en el cual te explico acerca de Cloud Storage.
Un poco de contexto
La mayoría de nosotros como programadores nos hemos visto en la necesidad de realizar peticiones http. Actualmente, no importando que tecnología estemos utilizando, existen muchas herramientas que nos facilitan esta tarea, pero, ¿Que pasa cuando la información que estamos recibiendo de dicha petición no es la que deberíamos recibir?, ¿Como podemos validar que esto sea así?
Aquí es donde entran el hash de información y SHA-512.
Hash de información y SHA-512
A grandes rasgos un hash es un algoritmo matemático que básicamente transforma un bloque de datos en otro distinto, con la característica de que este bloque final siempre tendrá la misma longitud, no importa la longitud del bloque de entrada, el bloque de salida siempre tendrá el mismo tamaño.
Existen varios métodos de hash (SHA-1, MD 5, etc.) pero el que nosotros estaremos utilizando es el SHA-512.
Ejemplo:
//El SHA-512 de la clásica cadena "Hola mundo" seria: 34ddb0edac59e441459e07cf33bd628f53fbbf752141125f069f32081b169f933666c71b2f1b83031da66bc905a1e72af7c6cfd779fc197513639a098f94c641
Algo muy importante a tener en cuenta es que cualquier cambie en los datos de entrada generara un hash distinto.
Ejemplo:
//SHA-512 de "Hola Mundo": bb0b2687b9f11a75110cbf78570ea7c8babb10880d533a1ab388113871bd643c47db96e1b19793476b5b3f3000071961aa6d6cab0c1c873c4d7515512c62bbbb //SHA-512 de "hola mundo": e361ecc31f2aac2066a3103d3b14dc63b5984b028f9f2d09dee67460ce2702bc81673acf58109b553324852c62a227d9a75d4c2f686580270fe143048f47c33c
Como podemos observar, a pesar de que las 3 cadenas son similares, el hecho de que modificar mayúsculas por minúsculas genera un hash totalmente distinto, lo cual es algo muy conveniente para lo que queremos realizar.
¿Como uso SHA-512 para validar información?
Ahora que ya sabemos como funciona a grandes rasgos un hash es muy simple de usar para poder validar la integridad de los datos recibidos de una llamada http.
Los pasos para realizar esto son muy simples en realidad, lo único que tenemos que hacer es, del lado de nuestra API tendríamos que agregar con cada respuesta un campo adicional donde venga el SHA-512 de la información que se nos esta mandando.
Ejemplo:
{ "sha512": "c9d89a0d7d67d99626e9d897775d08f3e21d2b6e0c18ec8158077226e0ca7b96c725e4944acb774422ec6f2846a12f5dd735901b7391b984d09d964be7fde1b0", "data": { "branchOffices": [ { "name": "", "address": "", "extras": "", "latitude": 23, "longitude": 2344 }, { "name": "", "address": "", "extras": "", "latitude": 23, "longitude": 2344 } ], "paymentMethods": [ "cash", "debitCard" ], "deliveryTimes": { "local": "firstString", "delivery": "secondString" }, "socialNetworks": { "facebook": "", "instagram": "" } } }
Como podrán ver, la respuesta de la llamada http contiene ahora dos campos principales, uno es la información que usaremos y otro es el SHA-512 que se genera al pasar dicha información por el proceso de hash.
Teniendo todo esto solo quedaría pasar del lado del cliente la información recibida por el mismo proceso de hash y comparar el resultado contra el SHA-512 que nos esta regresando la llamada http, si el SHA-512 generado del lado del cliente es distinto al que nos envió la llamada http es porque la información no es la que deberíamos estar recibiendo y entonces podríamos realizar las acciones correspondientes de acuerdo a nuestro proceso.
Algunos links de ayuda
El proceso de hash dependerá de la tecnología que estén usando. En este articulo trate de explicar de manera genérica el proceso a seguir para poder asegurar la integridad de nuestra información a través de una llamada http, aun así les toca a cada uno de ustedes investigar y determinar cual es la mejor librería dependiendo de su lenguaje de programación y necesidades.
En nuestro caso nosotros trabajamos con Nodejs y Android así que les dejo un par de links a las librerías que usamos para realizar este proceso:
- Nodejs: js-sha512
- Android: MessageDigest
Conclusion
Como podrás ver utilizar algoritmos de hash es una manera potente y fácil de validar información recibida de una llamada http, te invito a probarla y que nos dejes tus comentarios al respecto.
Espero este post les haya ayudado.
Hasta la próxima.