Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言中的等价python-hmac方法#_Python_C# - Fatal编程技术网

c语言中的等价python-hmac方法#

c语言中的等价python-hmac方法#,python,c#,Python,C#,我正在尝试将我的飞利浦电视与我正在编写的.NET程序配对 我发现了这个awessome Python库nammed,并将其用作参考,但在使用签名方法时遇到了困难 我不懂python,并且尝试了多种解决方案来用c语言复制相同的签名# 如果我在python中使用以下参数运行“create_signature” to_sign= 1400493467 secret_key = JCqdN5AcnAHgJYseUn7ER5k3qgtemfUvMRghQpTfTZq7Cvv8EPQPqfz6dDx

我正在尝试将我的飞利浦电视与我正在编写的.NET程序配对

我发现了这个awessome Python库nammed,并将其用作参考,但在使用签名方法时遇到了困难

我不懂python,并且尝试了多种解决方案来用c语言复制相同的签名#

如果我在python中使用以下参数运行“create_signature”

to_sign= 1400493467    
secret_key = JCqdN5AcnAHgJYseUn7ER5k3qgtemfUvMRghQpTfTZq7Cvv8EPQPqfz6dDxPQPSu4gKFPWkJGw32zyASgJkHwCjU
我得到这个输出

b'Y2NiNDQ4ZDcyYjg5ZmJlNzg1MWNiYjIyYzEwOGNhMTJmNWZmODYwNA=='

通常,我至少有几个问题,但我想我可以给出一个简单的答案

  • 您的
    to_sign
    是时间戳
    auth_timestamp
    还有一些
    pin

  • 您必须查看该时间戳是如何生成的(在 我的例子暗示这是Unix时代)

  • 大头针-是这个吗
    消息
    实际值或其他值(在我的示例中,我暗示它是 信息是什么

  • 您正在使用哪个SHA算法(
    SHA
    )?因为正确的HMAC实现依赖于此(在我的示例中,我指的是SHA256)


你能解释一下你到底想要什么吗?我正试图为我的家庭自动化系统编写一个插件来控制我的电视,但在将签名方法从python翻译成c#时遇到了问题,谢谢你的回答。我发现我的帖子可能会被误解,因为我把它命名为messsage而不是“to_sign”(我编辑了我的帖子)。你问我使用的witch SHA算法,我尝试了你使用的SHA256和SHA1,但得到的结果与我运行python脚本时得到的结果不同
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);
     }
 }