C#的HMAC SHA512值与Salesforce的值太短?

问题描述 投票:1回答:1

为什么我从Salesforce的Apex与C#中获得不同的mac值?

我具有以下C#代码来生成签名:

using (var hmacSha512 = System.Security.Cryptography.HMACSHA512.Create())
{
    byte[] payload = System.Text.Encoding.UTF8.GetBytes("payload");
    hmacSha512.Key = System.Text.Encoding.UTF8.GetBytes("key");
    byte[] macBytes = hmacSha512.ComputeHash(payload);
    string mac = BitConverter.ToString(macBytes).Replace("-", string.Empty).ToLower();
    Console.WriteLine(mac);
}

而且我试图在Apex中实现相应的代码:

Blob payload = Blob.valueOf('payload');
Blob key = Blob.valueOf('key');
Blob macBlob = Crypto.generateMac('hmacSHA512', payload, key);
string mac = EncodingUtil.convertToHex(macBlob);
System.debug(mac);

但是我得到的结果是不同的:

C#:    2f3902cd1626fa7fdfb67e93109f50412ad71531
Apex:  185beceee65a5ed7e43f7cc98530bfab1b0d00679488a47225255d04594fd7f17ed6908e7a08df57ac14c9e56c2fdef83ee9adaf9df2ff9f61465898c5d78c00

如您所见,Apex的结果比C#的结果长得多。自然,我决定通过也在十六进制中打印有效负载和键值来检查Blob-> Hex是否按预期工作:

// C#:
Console.WriteLine(BitConverter.ToString(payload).Replace("-", string.Empty).ToLower());
Console.WriteLine(BitConverter.ToString(hmacSha512.Key).Replace("-", string.Empty).ToLower());

// Results:
// 7061796c6f6164
// 6b6579

// Apex:
System.debug(EncodingUtil.convertToHex(payload));
System.debug(EncodingUtil.convertToHex(key));

// Results:
// 7061796c6f6164
// 6b6579

因此,blob值就是我所期望的,并且转换为十六进制的工作(毫不奇怪)正如我所期望的。

如果我在this online service上尝试相同的有效负载和键组合,则得到的值与Salesforce相同。甚至Java也与Salesforce相同。这使我认为C#实现不正确,但我不明白为什么。

[我以为我可能需要手动哈希SHA512并将其传递到HMCSHA512,但这对长度没有影响。

我在C#实现中做错了什么?

c# salesforce apex
1个回答
0
投票

似乎我实际上想将KeyedHashAlgorithm与“ HmacSHA512”一起使用:

using (var hmacSha512 = System.Security.Cryptography.KeyedHashAlgorithm.Create("HmacSHA512"))

[我意识到这在.NET Core中不起作用(运行Create方法时会引发异常),所以我将其更改为:

using (var hmacSha512 = new System.Security.Cryptography.HMACSHA512())

我不太确定为什么会提供不同的结果,但是当我运行它时,我肯定会得到与Apex相同的结果:

185beceee65a5ed7e43f7cc98530bfab1b0d00679488a47225255d04594fd7f17ed6908e7a08df57ac14c9e56c2fdef83ee9adaf9df2ff9f61465898c5d78c00
© www.soinside.com 2019 - 2024. All rights reserved.