Generando un hash SHA1 en Windows Phone 7.5

Hace unos días estaba trabajando en un proyecto en el que combinaba Web Services y WP7.5, en el mismo  necesitaba utilizar un hash SHA1 y como todo buen programador no quise reinventar la rueda así que decidí buscar en internet y me encontré con este post que me ayudó a implementar la generación del hash en el Web Service y todo de maravillas.

Pero cuando me tocó hacer la misma implementación en Windows Phone, sorpresa sorpresa, primero me encuentro con un error en la primera línea

 SHA1 sha1 = SHA1Managed.Create();

SHA1Managed no posee un método Create(), bueno, simple si el método no está implementados pues lo elimino ¿Fácil verdad?. Bueno y cuando creía que todo estaba resuelto más sorpresas, no existe la clase ASCIIEncoding, por un momento entré en pánico esto no se solucionaba con simplemente quitar un método, lo primero que se me ocurrió fue incluir el código como un servicio en el Web Service pero por cuestiones de seguridad no se debe enviar los datos en texto plano por la red para obtener el hash desde el Web Service ¿Y ahora qué hago?.

Pues simple,  seguir buscando, luego de leer varios foros y comentarios en montones de páginas (tantas que hasta perdí la traza) alguien sugirió que era factible emplear UTF8Enconding en lugar del ASCIIEncoding, bueno, decidí hacer mis pruebas y problema resuelto. Y bueno, por si lo necesitan y no pasen tanto tiempo en la búsqueda acá les dejo el código modificado, espero que les sea útil.

public static string GetSHA1(string str)
{
    SHA1 sha1 = new SHA1Managed();
    UTF8Encoding encoding = new UTF8Encoding();
    byte[] stream = null;
    StringBuilder sb = new StringBuilder();
    stream = sha1.ComputeHash(encoding.GetBytes(str));
    for (int i = 0; i < stream.Length; i++)
        sb.AppendFormat("{0:x2}", stream[i]);
    return sb.ToString();
}

Y por supuesto, no olvide incluir

using System.Security.Cryptography;
using System.Text;

En el código para que estén disponibles las clases necesarias para que todo funcione.

Deja un comentario