Dans une application, nous calculons un SHA1Hmac en Java en utilisant les éléments suivants:Interop: HMACSHA1 en Java et dotNet
SecretKey key = new SecretKeySpec(secret, "HmacSHA1");
Mac m = Mac.getInstance("HmacSHA1");
m.init(key);
byte[] hmac = m.doFinal(data);
Et plus tard, le HMAC est vérifiée en C# - sur une carte à puce - en utilisant:
HMACSHA1 hmacSha = new HMACSHA1(secret);
hmacSha.Initialize();
byte[] hmac = hmacSha.ComputeHash(data);
Cependant, le résultat n'est pas le même. Ai-je négligé quelque chose d'important?
Les entrées semblent être les mêmes. Voici quelques exemples: entrées
Data: 546573746461746131323341fa3c35
Key: 6d795472616e73616374696f6e536563726574
Result Java: 37dbde318b5e88acbd846775e38b08fe4d15dac6
Result C#: dd626b0be6ae78b09352a0e39f4d0e30bb3f8eb9
Je ne me dérangerait pas de mettre en œuvre ma propre HMACSHA1 sur les deux plates-formes, mais en utilisant ce qui existe déjà ....
Merci!
Peut-être une faute de frappe de, mais ne devrait pas vous passer « clé » à m.init au lieu de « secret »? – EventHorizon
Oui, une faute de frappe, merci de le signaler (corrigé maintenant) – wilth