Em um projeto que trabalhei havia uma parte da implementação que requeria que fosse gerada uma hash HMAC-SHA-1. No .NET é relativamente simples fazer isso, basta fazer a chamada:
var hmac = new HMACSHA1(key).ComputeHash(data);
E simples assim é gerada a hash HMAC-SHA-1. No entanto, no WinRT a coisa muda um pouco pois nem mesmo a classe HMACSHA1 está disponível no System.Security.Cryptography!
A mesma implementação no WinRT fica da seguinte forma:
private static string HmacSha1(string key, string message)
{
// instanciando o algoritmo de criptografia
var crypt = MacAlgorithmProvider.OpenAlgorithm(MacAlgorithmNames.HmacSha1);
// convetendo os dados para binario (tanto chave como msg a ser criptografada)
var messageBuffer = CryptographicBuffer.ConvertStringToBinary(message, BinaryStringEncoding.Utf8);
var keyBuffer = CryptographicBuffer.ConvertStringToBinary(key, BinaryStringEncoding.Utf8);
// gerando chave de criptografia
var cryptKey = crypt.CreateKey(keyBuffer);
// gerando hash de assinatura da mensagem
var signature = CryptographicEngine.Sign(cryptKey, messageBuffer);
// retornando a hash em hexadecimal.
return CryptographicBuffer.EncodeToHexString(signature);
}
Podemos usar algumas strings clássicas como teste neste método:
key = "key"
message = "The quick brown fox jumps over the lazy dog"
resultado = de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9
Para aprender mais sobre o HMAC-SHA1 clique aqui.