В приложении мы вычисляющий SHA1Hmac в Java, используя следующий:Interop: HmacSHA1 в Java и Dotnet
SecretKey key = new SecretKeySpec(secret, "HmacSHA1");
Mac m = Mac.getInstance("HmacSHA1");
m.init(key);
byte[] hmac = m.doFinal(data);
И спустя HMAC проверяется в C# - на SmartCard - с помощью:
HMACSHA1 hmacSha = new HMACSHA1(secret);
hmacSha.Initialize();
byte[] hmac = hmacSha.ComputeHash(data);
Однако, это не то же самое. Упустил ли я что-то важное?
Входы кажутся одинаковыми. Вот некоторые примеры входы:
Data: 546573746461746131323341fa3c35
Key: 6d795472616e73616374696f6e536563726574
Result Java: 37dbde318b5e88acbd846775e38b08fe4d15dac6
Result C#: dd626b0be6ae78b09352a0e39f4d0e30bb3f8eb9
Я был бы не против, чтобы реализовать собственный hmacsha1 на обеих платформах, но используя то, что уже существует ....
Спасибо!
Возможно, опечатка, но ты не должен пройти «ключ» к m.init вместо «секрет»? – EventHorizon
Да, опечатка, спасибо, что указали это (исправлено сейчас) – wilth