【发布时间】: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 字符导致了这种情况?
【问题讨论】:
-
你的假设是正确的。见Illegal characters in HTTP headers
标签: c# hash character-encoding http-headers sha512