J'ai besoin de calculer le HMAC en utilisant la fonction de hachage SHA256. J'ai une clé secrète encodée au format base64. Il existe également un outil en ligne qui calcule correctement le HMAC (vérifié). http://www.freeformatter.com/hmac-generator.html j'ai écrit l'extrait de code suivant:Calcul de hachage HMAC SHA256 en C#
var signatureHashHexExpected = "559bd871bfd21ab76ad44513ed5d65774f9954d3232ab68dab1806163f806447";
var signature = "123456:some-string:2016-04-12T12:44:16Z";
var key = "AgQGCAoMDhASFAIEBggKDA4QEhQCBAYICgwOEBIUAgQ=";
var shaKeyBytes = Convert.FromBase64String(key);
using (var shaAlgorithm = new System.Security.Cryptography.HMACSHA256(shaKeyBytes))
{
var signatureBytes = System.Text.Encoding.UTF8.GetBytes(signature);
var signatureHashBytes = shaAlgorithm.ComputeHash(signatureBytes);
var signatureHashHex = string.Concat(Array.ConvertAll(signatureHashBytes, b => b.ToString("X2"))).ToLower();
System.Diagnostics.Debug.Assert(signatureHashHex == signatureHashHexExpected);
}
PROBLÈME: Mon code ne génère pas le bon HMAC. J'ai vérifié différentes étapes en utilisant différents outils en ligne et d'autres implémentations C#. Seule la conversion de base64 n'est pas confirmée. Qu'est-ce que je rate?
MISE À JOUR: signatureHashHex Calculé par mon code est « a40e0477a02de1d134a5c55e4befa55d6fca8e29e0aa0a0d8acf7a4370208efc »
RÉPONSE: La question a été causée par une documentation trompeuse indiquant la clé est fournie en base64. Voir la réponse acceptée:
var shaKeyBytes = System.Text.Encoding.UTF8.GetBytes(key);
Etes-vous sûr que la signature est encodée en UTF8? –
Avez-vous essayé ceci: http://stackoverflow.com/q/33419006/479156 – Ivar
Non, mais j'ai essayé un certain nombre de codages différents avec le même résultat. – Kalitsov