Solución:
Solo para ampliar la respuesta de Jon, porque probablemente se esté preguntando cuál es el punto de cifrar algo que no puede descifrar: HMAC-SHA1 es, como dijo Jon, un hash. La cadena producida no contiene la información original, ni siquiera en forma encriptada … Es solo una secuencia de bytes.
Sin embargo, la belleza del hash es que cualquier tipo de cambio que pueda hacer en la cadena resultará casi con certeza en un cambio en el resultado del hash, y el resultado del hash tiende a ser bastante pequeño. Por esta razón, los hash se utilizan a menudo para garantizar que no se haya manipulado una pieza de información.
Por ejemplo,
Quiero enviarle un mensaje a Jon aquí, y quiero que esté seguro de que uno de sus compañeros no ha cambiado el mensaje antes de leerlo. No puedo simplemente tomar el hash de mi mensaje y enviarlo, porque todo lo que un causante de problemas tendría que hacer es reemplazar el mensaje con uno propio y proporcionar un hash apropiado …
Sin embargo, si proporciono a mi mensaje un hash no del mensaje en sí, sino del mensaje con algunos bytes adicionales específicos que John y yo hemos acordado de antemano, el alborotador es derrotado. Jon sabe que debe agregar los bytes adicionales (comúnmente conocido como salar el hash) antes de que haga el hash de mi mensaje, pero el causante del problema no lo hace, por lo que si cambia el mensaje, a pesar de que elabora su propio hash, Jon puede ver ese algo. está mal …
El cifrado / hashes es un negocio complicado, y yo mismo apenas he arañado la superficie, pero pensé que esto podría darte un ejemplo simple de para qué se usan los hashes …
Otro uso muy común es para mantener la información de membresía del sitio: las personas no almacenan la contraseña, sino el hash de la contraseña. Esto significa que incluso si alguien logra robar sus datos de usuario, no podrá usarlos para iniciar sesión en su sistema.
Martín
HMAC-SHA1 es un hash unidireccional, no un algoritmo de cifrado bidireccional. No puedes descifrarlo. No tengo tiempo para proporcionar el código de cifrado completo aquí; es un tema complicado, pero “Beginning ASP.NET Security” de Barry Dorrans le daría un buen punto de partida. (Solo una parte es específica de ASP.NET). También puede ver su charla DDD sobre el tema.
Una simple explicación de hash unidireccional de por qué la gente querría hacerlo.
Supongamos que tiene una cuenta de usuario con el nombre de usuario John y la contraseña Doe. Almacena el hash de la siguiente cadena.
Nombre, su número favorito y su contraseña seleccionada
por ejemplo: hash = myHash (“[email protected]”)
now hash = "qk239qa*@$)(*84509053903" or whatever
Ahora ese hash es seguro y no se puede revertir para averiguar cuál es su número favorito en la mayoría de los casos. Para verificar si el hash es el correcto para iniciar sesión, volvería a aplicar el hash a la entrada proporcionada (nombre, su número o w / e, contraseña) y si obtiene el mismo hash exacto, es una oferta válida. ¡Wo0t no es completamente simple!
– ¿Debo usar la misma clave para volver a aplicar el hash a mis datos?