Gente,
Comparto algo que recién lo precisamos para un proyecto y entiendo aplica a varios escenarios.
Escenario:
Generar un hash de un string utilizando además una key secreta para agregar de esa manera un nivel más de seguridad, evitando que alguien se meta en el medio, cambie datos y vuelva a generar un hash idéntico.
Esto es lo que se conoce como MAC (Message Authentication Code). En esencia, el resultado es un hash encriptado.
Método
Existen varios mecanismos en la vuelta para generar esto (HMACMD5 , HMACSHA1). Hoy Microsoft está recomendando el uso de SHA256, por lo cual, opté por utilizar HMACSHA256.
Código
A continuación comparto las partes relevantes del código que permite hacer esto:
using System.Security.Cryptography;
…
public
string GetMACHash(string textToHash)
{
// secret key shared by sender and receiver.
byte[] secretkey = new
Byte[64];
string key = null;
string result = null;
//get secret key
key = "MySecretKey"; //esto podemos invocar a un metodo que traiga este valor de la registry por ejemplo
secretkey = System.Text.UTF8Encoding.UTF8.GetBytes(key);
// Initialize the keyed hash object.
HMACSHA256 myhmacsha256 = new
HMACSHA256(secretkey);
// Compute the hash of the text.
byte[] bytedText = System.Text.UTF8Encoding.UTF8.GetBytes(textToHash);
byte[] hashValue = myhmacsha256.ComputeHash(bytedText);
//Base-64 Encode the results and strip off ending '==', if it exists
result = Convert.ToBase64String(hashValue).TrimEnd("=".ToCharArray());
//set response
return result;
}
Referencias
Aquí hay un buen artículo que habla acerca de MACs.
http://dotnetslackers.com/articles/security/Hashing_MACs_and_Digital_Signatures_in_NET.aspx
Aquí la información sobre la clase HMACSHA256
http://msdn.microsoft.com/en-us/library/system.security.cryptography.hmacsha256.aspx

0 comentarios:
Publicar un comentario en la entrada