POST SHA512 加密字符串作为 HTTP Header(在 C# 中)

POST SHA512 Encrypted String as HTTP Header (in C#)

几个小时以来我一直反对这个问题,但我似乎找不到解决方案。我正在尝试使用 SHA512 加密字符串并将其放入 HTTP 请求的 header 中。我知道 HTTP Headers 只喜欢 ASCII 字符,但每次我生成加密字符串时,我只得到非 ASCII 的结果,有没有办法强制使用 ASCII return?这是我生成加密的函数:

private static string GenerateSignatureHeader(string data, string timestamp){
   //Encode to UTF8 required for SHA512
   byte[] encData = ASCIIEncoding.UTF8.GetBytes (data);
   byte[] hash;         
   using (SHA512 shaM = new SHA512Managed ()) {
       hash = shaM.ComputeHash (encData);
   }
   return ASCIIEncoding.Default.GetString (hash);
}

并在此处添加到 HTTP 请求:

request.Headers.Add("signature", GenerateSignatureHeader(body, timestamp));

我在这里做的对吗?尝试将 header 添加到请求时抛出错误:

Caused by: md52ce486a14f4bcd95899665e9d932190b.JavaProxyThrowable: System.ArgumentException: invalid header value: 4Ɓj�M�P��hM�$� �s;��6��1!��,�y��.x;��d�G�↌�2�@1'��1� Parameter name: headerValue System.Net.WebHeaderCollection.AddWithoutValidate (string,string) System.Net.WebHeaderCollection.Add (string,string)

所以我假设是非 ASCII 字符导致的?

一个哈希函数return伪随机字节。这样的字节数组很可能不对应于有效的字符编码,例如 ASCII。这就是为什么您会得到那些不可打印的字符占位符。

您需要对输出进行编码。例如使用 Base64 或 Hex。

return System.Convert.ToBase64String(hash);