using System.Security.Cryptography;
public static void Main()
HttpContent content = null;
var header = GetHeaderValue(method, url, content, privateKey, publicKey);
Console.WriteLine(header);
private static string GetHeaderValue(string requestHttpMethod, string requestAbsoluteUri, HttpContent httpContent, string privateKey, string publicKey)
string requestContentBase64String = string.Empty;
string requestUri = HttpUtility.UrlEncode(requestAbsoluteUri.ToLower());
DateTime epochStart = new DateTime(1970, 01, 01, 0, 0, 0, 0, DateTimeKind.Utc);
TimeSpan timeSpan = DateTime.UtcNow - epochStart;
string requestTimeStamp = Convert.ToUInt64(timeSpan.TotalSeconds).ToString();
string nonce = Guid.NewGuid().ToString("N");
byte[] content = httpContent.ReadAsByteArrayAsync().Result;
byte[] requestContentHash = md5.ComputeHash(content);
requestContentBase64String = Convert.ToBase64String(requestContentHash);
string signatureRawData = $"{publicKey}{requestHttpMethod}{requestUri}{requestTimeStamp}{nonce}{requestContentBase64String}";
var secretKeyByteArray = Convert.FromBase64String(privateKey);
byte[] signature = System.Text.Encoding.UTF8.GetBytes(signatureRawData);
using (HMACSHA256 hmac = new HMACSHA256(secretKeyByteArray))
byte[] signatureBytes = hmac.ComputeHash(signature);
string requestSignatureBase64String = Convert.ToBase64String(signatureBytes);
var headerValue = $"amx {publicKey}:{requestSignatureBase64String}:{nonce}:{requestTimeStamp}";