我正在创建一个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编码密钥,但没有运气。
答案 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