【问题标题】:POST SHA512 Encrypted String as HTTP Header (in C#)POST SHA512 加密字符串作为 HTTP 标头(在 C# 中)
【发布时间】:2015-07-12 03:37:42
【问题描述】:

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

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));

我在这里做的正确吗?尝试将标头添加到请求时抛出错误:

原因:md52ce486a14f4bcd95899665e9d932190b.JavaProxyThrowable:System.ArgumentException:无效标头值:4Ɓj�M�P��hM�$。 �s;��6��1!��,�y��.x;��d�G�↌�2�@1'��1� 参数名称:headerValue System.Net.WebHeaderCollection.AddWithoutValidate(字符串,字符串) System.Net.WebHeaderCollection.Add (string,string)

所以我假设是非 ASCII 字符导致了这种情况?

【问题讨论】:

标签: c# hash character-encoding http-headers sha512


【解决方案1】:

哈希函数返回伪随机字节。这样的字节数组很可能与 ASCII 等有效字符编码不对应。这就是为什么你会得到那些不可打印的字符占位符。

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

return System.Convert.ToBase64String(hash);

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多