C# Android HMAC 结果

C# Android HMAC result

我在 C# 中使用以下代码进行 HMAC 转换:

 string RawData = "data";
  string sharedKey = "my-key";
 byte[] signature = Encoding.UTF8.GetBytes(RawData);
 var KeyByteArray = Encoding.UTF8.GetBytes(sharedKey);


            using (HMACSHA256 hmac = new HMACSHA256(KeyByteArray))
            {
                byte[] signatureBytes =hmac.ComputeHash(signature);

         var ContentBase64String =(Convert.ToBase64String(signatureBytes));

                Console.WriteLine(ContentBase64String );
                Console.ReadKey();
            }

以及 Java 中的以下内容:

 String   RawData="data";
 String Key="my-key";
byte[] KeyByteArray=Key.getBytes("UTF-8");

byte[] signature=RawData.getBytes("UTF-8");


Mac sha256_HMAC;
sha256_HMAC = Mac.getInstance("HmacSHA256");

SecretKeySpec secret_key = new SecretKeySpec(KeyByteArray, "HmacSHA256");
    sha256_HMAC.init(secret_key);
String ContentBase64String = Base64.encodeToString(sha256_HMAC.doFinal(signature),Base64.URL_SAFE|Base64.NO_WRAP);

C# 的输出如下:
android 的输出如下:

我已经用了很多天了,但我不知道我做错了什么,因为输出不同,尽管它们应该是一样的。此外,当我删除 - 在关键结果是一样的。我知道我可能会遗漏一些简单的东西,但我认为另一双眼睛可能会看到我的错误。谢谢。

这些答案是相同的(就 HMAC 中包含的字节而言)。对于输出中 +- 字符的差异,您 通过指定 the Base64.URL_SAFE flag.[=14= 明确告诉它这样做 ]

对于这个问题的未来读者:如有疑问,请查阅文档以了解您不完全理解的所有内容。