在應用程序中,我們在Java中使用計算SHA1Hmac如下:互操作性:HMACSHA1用Java和DOTNET
SecretKey key = new SecretKeySpec(secret, "HmacSHA1");
Mac m = Mac.getInstance("HmacSHA1");
m.init(key);
byte[] hmac = m.doFinal(data);
及更高版本,HMAC是在C#中驗證 - 在智能卡上 - 使用:
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 2010-04-19 10:55:46
是的,一個錯字,感謝您指出(現在糾正它) – wilth 2010-05-04 03:12:58