2016-03-06 115 views
0

我正在創建SHA簽名以將視頻上傳到JWPlayer平臺。我能夠創建帶特殊字符的SHA簽名,但是當我使用簽名上傳視頻時,JWPlayer平臺網站的響應是「簽名期間的Unicode錯誤」,但僅限於使用特殊字符。如果我不包含特殊字符,它工作正常。這裏是鏈接如何創建簽名https://developer.jwplayer.com/jw-platform/reference/v1/authentication.html 我有以下代碼來創建簽名,其中標題可以包含特殊字符:帶特殊字符的SHA簽名

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")); 
    } 
} 

關鍵是還可以根據用戶輸入構造,因此它需要支持特殊字符。我也試過網址編碼的關鍵,但沒有運氣。

回答

1

Encoding.UTF8正常工作。見例如https://ideone.com/VFzogL。你完全按照我寫的那樣寫。

而且您寫的代碼中沒有任何內容可以在簽名過程中拋出「Unicode錯誤」錯誤。

請勿使用。它不支持任何非ASCII字符。

+0

感謝您的快速回復我重新表達了我的問題,對此抱歉。 – doorman

+0

@doorman然後你的問題就在你寫的10行代碼之外...... – xanatos

+0

@doorman你必須告訴我們你是如何調用API的。您可能正在跳過第1步或第2步*所有文本參數都轉換爲UTF-8編碼*和*所有文本參數都是URL編碼的(請參閱OAuth Core 1.0第5.1節)*。我看到有一個非ASCII文本預期輸出的完整示例:'démo'。根據你想要調用API的方式,你可能會不同,你如何編碼url – xanatos

2

這不是SHA問題。 SHA不關心編碼,它可以處理8位字節的數組。

你如何向接收者提供密鑰,這是一個潛在的編碼問題。不同的UTF格式?

查看提供給SHA的數據以及如何處理散列數據。

SHA的輸出不是UTF-8可編碼數據,也不是真正的任何字符編碼。它可能需要編碼爲ASCII格式,如Base64或十六進制。

0

問題出在空間字符的編碼上,所以我不得不用%20替換所有的符號。

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