C# 特殊字符签名
我正在创建一个SHA签名,以便将视频上载到JWPlayer平台。我也可以使用特殊字符创建SHA签名,但当我使用签名上传视频时,JWPlayer平台站点的响应是“签名期间的Unicode错误”,但仅当我使用特殊字符时。如果我不包含特殊角色,它可以正常工作。下面是如何创建签名的链接 我有以下代码来创建签名,其中标题可以包含特殊字符:C# 特殊字符签名,c#,encryption,encoding,jwplayer,C#,Encryption,Encoding,Jwplayer,我正在创建一个SHA签名,以便将视频上载到JWPlayer平台。我也可以使用特殊字符创建SHA签名,但当我使用签名上传视频时,JWPlayer平台站点的响应是“签名期间的Unicode错误”,但仅当我使用特殊字符时。如果我不包含特殊角色,它可以正常工作。下面是如何创建签名的链接 我有以下代码来创建签名,其中标题可以包含特殊字符: var titleParam = $"title={title}"; var key = $"{apiFormat}&{apiKey}&{apiNonc
var titleParam = $"title={title}";
var key = $"{apiFormat}&{apiKey}&{apiNonce}&{apiTimestamp}&{titleParam}{secretKey}";
StringBuilder sb;
using (var sha1 = new SHA1Managed())
{
var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(key));
sb = new StringBuilder(hash.Length * 2);
foreach (byte b in hash)
{
sb.Append(b.ToString("x2"));
}
}
密钥也是基于用户输入构建的,因此需要支持特殊字符。我还尝试了对键进行url编码,但没有成功。与
编码.UTF8一起正确工作。例如,见。你写的和我写的一模一样
您编写的代码中没有任何内容会抛出“签名期间的Unicode错误”错误
不要使用编码.ASCII
。它不支持任何非ASCII字符。可以正确使用编码.UTF8
。例如,见。你写的和我写的一模一样
您编写的代码中没有任何内容会抛出“签名期间的Unicode错误”错误
不要使用编码.ASCII
。它不支持任何非ASCII字符。这不是SHA问题。SHA不关心编码,它使用8位字节的数组
如何向接收方提供密钥,这是一个潜在的编码问题。不同的UTF格式
查看提供给SHA的数据以及如何处理散列数据
SHA的输出既不是UTF-8可编码数据,也不是任何字符编码。可能需要将其编码为ASCII格式,如Base64或十六进制。这不是SHA问题。SHA不关心编码,它使用8位字节的数组
如何向接收方提供密钥,这是一个潜在的编码问题。不同的UTF格式
查看提供给SHA的数据以及如何处理散列数据
SHA的输出既不是UTF-8可编码数据,也不是任何字符编码。可能需要将其编码为ASCII格式,如Base64或十六进制。问题在于空格字符的编码,因此我必须将所有+符号替换为%20
string EncodeParam(string param)
{
var s = WebUtility.UrlEncode(param);
return s.Replace("+", "%20");
}
问题在于空格字符的编码,因此我必须用%20替换所有+符号
string EncodeParam(string param)
{
var s = WebUtility.UrlEncode(param);
return s.Replace("+", "%20");
}
谢谢您的快速回复,我重新措辞了我的问题,对此表示抱歉。@doorman您必须向我们展示您是如何调用API的。您可能正在跳过步骤1或步骤2所有转换为UTF-8编码的文本参数。和所有文本参数URL编码(参见OAuth Core 1.0第5.1节)。我看到了一个完整的示例,其中包含一个非ASCII文本的预期输出:démo
。根据您想要调用API的方式,URL的编码方式可能会有所不同。谢谢您的帮助。请参阅上面的更新代码。@doorman一般来说,我建议您使用OAuth库来编写C。我不使用OAuth,所以我也不知道,但我很确定有一些。如果你真的想,我可以放一些C行代码来编码所有东西,但我觉得这是错误的。。。它将“在工作时”起作用。这将是一个“补丁”,而不是由“领域专家”编写的“有限产品”,谢谢,但是WebUtility.UrlEncode不包括编码吗?除了空格外,字母是特例。其他的特殊字符也起作用了。谢谢你的快速回复,我重新措辞了我的问题,对此表示抱歉。@doorman,你必须告诉我们你是如何调用API的。您可能正在跳过步骤1或步骤2所有转换为UTF-8编码的文本参数。和所有文本参数URL编码(参见OAuth Core 1.0第5.1节)。我看到了一个完整的示例,其中包含一个非ASCII文本的预期输出:démo
。根据您想要调用API的方式,URL的编码方式可能会有所不同。谢谢您的帮助。请参阅上面的更新代码。@doorman一般来说,我建议您使用OAuth库来编写C。我不使用OAuth,所以我也不知道,但我很确定有一些。如果你真的想,我可以放一些C行代码来编码所有东西,但我觉得这是错误的。。。它将“在工作时”起作用。这将是一个“补丁”,而不是由“领域专家”编写的“有限产品”,谢谢,但是WebUtility.UrlEncode不包括编码吗?除了空格外,字母是特例。其他特殊角色也发挥了作用。