【问题标题】:SHA Signature with special characters带有特殊字符的 SHA 签名
【发布时间】:2016-06-19 23:51:58
【问题描述】:

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

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

【问题讨论】:

    标签: c# encryption encoding jwplayer


    【解决方案1】:

    Encoding.UTF8 一起正常工作。参见例如 https://ideone.com/VFzogL 。你写的和我写的完全一样。

    您编写的代码中的任何内容都不会引发“签名期间的 Unicode 错误”错误。

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

    【讨论】:

    • 感谢您的快速回复,我重新表述了我的问题,对此感到抱歉。
    • @doorman 您必须向我们展示您是如何调用 API 的。您可能正在跳过第 1 步或第 2 步 所有文本参数都转换为 UTF-8 编码。所有文本参数 URL 编码(请参阅 OAuth Core 1.0 第 5.1 节)。。我看到有一个带有非 ASCII 文本的预期输出的完整示例:démo。根据您想要调用 API 的方式,您对 url 进行编码的方式可能会有所不同
    • 感谢您的帮助。请参阅上面的更新代码。
    • @doorman 一般来说,我建议您使用 C# 的 OAuth 库。我不使用 OAuth,所以我不知道,但我很确定周围有一些。如果你真的想要,我可以放一些 C# 代码行来对所有内容进行编码,但我觉得这是错误的......它会“在它工作的时候”工作。这将是一个“补丁”,而不是由“该领域的专家”编写的“有限产品”
    • 谢谢,但 WebUtility.UrlEncode 不包括编码吗?除了空格字母是特殊情况。其他特殊字符有效。
    【解决方案2】:

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

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

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

    SHA 的输出不是 UTF-8 编码数据,也不是任何字符编码。它可能需要编码成 ASCII 格式,例如 Base64 或 Hexadecimal。

    【讨论】:

      【解决方案3】:

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

      string EncodeParam(string param)
      {
           var s = WebUtility.UrlEncode(param);
           return s.Replace("+", "%20");
      }
      

      【讨论】:

        猜你喜欢
        • 2017-06-15
        • 2014-04-17
        • 1970-01-01
        • 2022-01-07
        • 2019-01-17
        • 1970-01-01
        • 2016-08-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多