c语言中的等价python-hmac方法#
我正在尝试将我的飞利浦电视与我正在编写的.NET程序配对 我发现了这个awessome Python库nammed,并将其用作参考,但在使用签名方法时遇到了困难 我不懂python,并且尝试了多种解决方案来用c语言复制相同的签名# 如果我在python中使用以下参数运行“create_signature”c语言中的等价python-hmac方法#,python,c#,Python,C#,我正在尝试将我的飞利浦电视与我正在编写的.NET程序配对 我发现了这个awessome Python库nammed,并将其用作参考,但在使用签名方法时遇到了困难 我不懂python,并且尝试了多种解决方案来用c语言复制相同的签名# 如果我在python中使用以下参数运行“create_signature” to_sign= 1400493467 secret_key = JCqdN5AcnAHgJYseUn7ER5k3qgtemfUvMRghQpTfTZq7Cvv8EPQPqfz6dDx
to_sign= 1400493467
secret_key = JCqdN5AcnAHgJYseUn7ER5k3qgtemfUvMRghQpTfTZq7Cvv8EPQPqfz6dDxPQPSu4gKFPWkJGw32zyASgJkHwCjU
我得到这个输出
b'Y2NiNDQ4ZDcyYjg5ZmJlNzg1MWNiYjIyYzEwOGNhMTJmNWZmODYwNA=='
通常,我至少有几个问题,但我想我可以给出一个简单的答案
- 您的
是时间戳to_sign
还有一些auth_timestamp
pin
- 您必须查看该时间戳是如何生成的(在 我的例子暗示这是Unix时代)
- 大头针-是这个吗
实际值或其他值(在我的示例中,我暗示它是 信息是什么消息
- 您正在使用哪个SHA算法(
)?因为正确的HMAC实现依赖于此(在我的示例中,我指的是SHA256)SHA
b'Y2NiNDQ4ZDcyYjg5ZmJlNzg1MWNiYjIyYzEwOGNhMTJmNWZmODYwNA=='
static void Main(string[] args)
{
int message = 1400493467;
string secret_key = "key";
string auth_Timestamp = (DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds.ToString();// is this the Unix-Time
string pin = message.ToString(); // is this the message?
string to_sign = auth_Timestamp + pin;//str(auth_Timestamp).encode() + str(pin).encode()
string result = create_signature(secret_key, to_sign);
Console.WriteLine(result);
}
private static string create_signature(string secret_key, string to_sign)
{
// Which SHA are you using? SHA256 (HMACSHA256), SHA1 (HMACSHA1) or something else
using (var hmacsha256 = new HMACSHA256(Encoding.UTF8.GetBytes(secret_key)))
{
var hash = hmacsha256.ComputeHash(Encoding.UTF8.GetBytes(to_sign));
return Convert.ToBase64String(hash);
}
}