C#SHA512到十六进制字符串

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

[有一个名为Crypto-js的JavaScript库,我正在尝试将一些我使用的方法转换为c#。

例如,在javascript中:

 var payload = JSON.stringify({ market: "BTC-ETH", order: { price: "0.02159338", side: "buy", size: "0.024" } });
 var contentHash = cryptoJS.SHA512(payload).toString(cryptoJS.enc.Hex);
 console.log(contentHash);

在C#中

 public class OrdersVM
    {        
        public string Market { get; set; }        
        public Order Order { get; set; }
    }

    public class Order
    {
        public string Price { get; set; }
        public string Side { get; set; }
        public string Size { get; set; }
    }

 public async Task<IActionResult> Orders([FromBody] OrdersVM vm) {
     var payload = JsonConvert.SerializeObject(vm);
     var contentHash = sha512Hex(payload).ToLower();
     Console.WriteLine(contentHash);
 }

 public string sha512Hex(string input)
 {
     var bytes = Encoding.UTF8.GetBytes(input);
     using (var hash = SHA512.Create())
     {
          hash.ComputeHash(bytes);
          return BitConverter.ToString(hash.Hash).Replace("-", "");
     }
  }

JavaScript的[contentHash

“ 99bb05af8aace509189e08625bb4e475a9daaafc92edf5c85fa1aefcc16c16e4533c23843c5806aef01c97e8cb4150b2dc129d04d3b6a50331833fe5cb8158fc”

并且对于c#

“ 731b92cf482ff90ffe759e356959ec005334062bdc3c2cc78b48c3041d21a45ecaa6b33f6df2971fa868f94f04b7596e818104cb1017ed1c436365beac3a01d1”

C#转换我在做什么错?

javascript c# hex sha512
1个回答
0
投票

问题是,默认情况下,JSON.Net将完全按照外观对属性名称进行序列化,这意味着它们都以大写字母开头。有两种方法可以解决此问题:

  1. 使用JsonProperty显式控制属性名称的序列化。例如:

    JsonProperty
  2. 使用public class OrdersVM { [JsonProperty("market")] public string Market { get; set; } [JsonProperty("order")] public Order Order { get; set; } } 告诉JSON.Net如何处理名称。幸运的是,有一个将为您提供此功能:

    contract resolver
© www.soinside.com 2019 - 2024. All rights reserved.