Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 特殊字符签名_C#_Encryption_Encoding_Jwplayer - Fatal编程技术网

C# 特殊字符签名

C# 特殊字符签名,c#,encryption,encoding,jwplayer,C#,Encryption,Encoding,Jwplayer,我正在创建一个SHA签名,以便将视频上载到JWPlayer平台。我也可以使用特殊字符创建SHA签名,但当我使用签名上传视频时,JWPlayer平台站点的响应是“签名期间的Unicode错误”,但仅当我使用特殊字符时。如果我不包含特殊角色,它可以正常工作。下面是如何创建签名的链接 我有以下代码来创建签名,其中标题可以包含特殊字符: var titleParam = $"title={title}"; var key = $"{apiFormat}&{apiKey}&{apiNonc

我正在创建一个SHA签名,以便将视频上载到JWPlayer平台。我也可以使用特殊字符创建SHA签名,但当我使用签名上传视频时,JWPlayer平台站点的响应是“签名期间的Unicode错误”,但仅当我使用特殊字符时。如果我不包含特殊角色,它可以正常工作。下面是如何创建签名的链接 我有以下代码来创建签名,其中标题可以包含特殊字符:

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不包括编码吗?除了空格外,字母是特例。其他特殊角色也发挥了作用。