一段c#代码求大神转Python,尤其是CreateToken这个方法,谢谢

zy081908 2020-01-13 10:19:31
我试了python中的加密,结果和这段c#方法加密出来的长度都不一样
大神帮我看看。




using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Test2
{
public class Program
{
public static void Main(string[] args)
{
var app_key = "xxxxxxx";
var app_sec = "xxxxxx";
var app_id = "xxxxxxx";
var ts = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
var url = $"/create/accesstoken?t={ts}";
var body = $"{{\"app_id\":\"{app_id}\",\"app_key\":\"{app_key}\"}}";
var hashKey = $"{app_sec}{ts}";
var sign = CreateToken($"{url}{body}", hashKey);
var reqUrl = $"https://openapi/create/accesstoken?t={ts}";
var header = new Dictionary<string, string>();
header.Add("x-tg-token", ts.ToString());
header.Add("x-tg-sign", sign);
var response = Post(reqUrl, body, header);
Console.WriteLine($"CreateTokenResponse:{response}");
var tokenResponse = JsonConvert.DeserializeObject<CreateToken>(response);
url = $"/FlightChange/Add?t={ts}";
body = "{\"AddType\":0,\"ChangeReason\":0,\"ChangeType\":\"1\",\"NewArrTime\":\"2019-11-04 22:30:00\",\"NewDepTime\":\"2019-11-04 18:55:00\",\"NewEndPort\":\"LHW\",\"NewFlightNo\":\"DR6593\",\"NewStartPort\":\"WNZ\",\"OrgArrTime\":\"2019-11-04 14:40:00\",\"OrgDepTime\":\"2019-11-04 14:40:00\",\"OrgEndPort\":\"LHW\",\"OrgFlightNo\":\"DR6593\",\"OrgStartPort\":\"WNZ\",\"RequestGuid\":\"eefdfaee0ac047fda68d048183bda7c4\"}";
hashKey = $"{app_sec}{tokenResponse.access_token}";
sign = CreateToken($"{url}{body}", hashKey);
Console.WriteLine($"AppSign:{sign}");
header = new Dictionary<string, string>();
header.Add("x-tg-token", tokenResponse.access_token);
header.Add("x-tg-sign", sign);
header.Add("x-appkey", app_key);
reqUrl = $"https://openapi.air.ly.com/FlightChange/Add?t={ts}";
response = Post(reqUrl, body, header);
Console.WriteLine($"AppApplyResponse:{response}");

Console.ReadKey();
}

/// <summary>
/// HTTP POTS请求
/// </summary>
/// <param name="requestUrl"></param>
/// <param name="requestData"></param>
/// <param name="headers"></param>
/// <returns></returns>
public static string Post(string requestUrl, string requestData, Dictionary<string, string> headers)
{
string result = string.Empty;

try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl);
byte[] data = Encoding.GetEncoding("UTF-8").GetBytes(requestData);
request.Method = "Post";
request.ContentType = "application/json";
if (headers != null && headers.Any())
{
foreach (var header in headers)
{
request.Headers[header.Key] = header.Value;
}
}
request.ContentLength = data.Length;
request.Timeout = 100000;
request.KeepAlive = false;
using (var requestStream = request.GetRequestStream())
{
requestStream.Write(data, 0, data.Length);
//响应流
HttpWebResponse m_Response = (HttpWebResponse)request.GetResponse();
var responseStream = m_Response.GetResponseStream();
var streamReader = new StreamReader(responseStream, Encoding.GetEncoding("UTF-8"));
//获取返回的信息
result = streamReader.ReadToEnd();
}
}
catch (Exception ex)
{
result = ex.Message;
}

return result;
}


/// <summary>
/// hamcSHA256加密实现
/// </summary>
/// <returns>The token.</returns>
/// <param name="secret">Secret.</param>
/// <param name="message">Message.</param>
public static string CreateToken(string message, string secret)
{
secret = secret ?? "";
var encoding = new System.Text.UTF8Encoding();
byte[] keyByte = encoding.GetBytes(secret);
byte[] messageBytes = encoding.GetBytes(message);
using (var hmacsha256 = new HMACSHA256(keyByte))
{
byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
return BitConverter.ToString(hashmessage).Replace("-", "").ToLower();
}
}
}

public class CreateToken
{
public string access_token { get; set; }
}
}
...全文
114 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
langth-time 2020-01-13
  • 打赏
  • 举报
回复
############# import hmac import base64 def CreateToken(message, secret): return hmac.new(secret.encode('utf8'), message.encode('utf8'), digestmod='sha256').hexdigest() print(CreateToken('Hello', 'World'))

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧