带有特殊字符的SHA签名

时间:2016-03-06 12:06:24

标签: c# encryption encoding jwplayer

我正在创建一个SHA签名来将视频上传到JWPlayer平台。我也可以使用特殊字符创建SHA签名但是当我使用签名上传视频时,来自JWPlayer平台站点的响应是“签名期间的Unicode错误”,但仅当我使用特殊字符时。如果我不包含特殊字符,它可以正常工作。以下是如何创建签名https://developer.jwplayer.com/jw-platform/reference/v1/authentication.html的链接 我有以下代码来创建签名,其中title可以包含特殊字符:

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编码密钥,但没有运气。

3 个答案:

答案 0 :(得分:2)

这不是SHA问题。 SHA不关心编码,它适用于8位字节的数组。

如何为接收器提供密钥,这是一个潜在的编码问题。不同的UTF格式?

查看提供给SHA的数据以及如何处理散列数据。

SHA的输出不是UTF-8可编码数据,也不是任何字符编码。它可能需要编码为ASCII格式,如Base64或十六进制。

答案 1 :(得分:1)

Encoding.UTF8一起正常使用。请参阅示例https://ideone.com/VFzogL。你写的完全像我写的那样。

您编写的代码中没有任何内容可能会导致“签名时出现Unicode错误”错误。

请勿使用Encoding.ASCII。它不支持任何非ASCII字符。

答案 2 :(得分:0)

问题在于空格字符的编码所以我不得不用%20替换所有+符号。

secret