Я разрабатываю приложение, которое использует некоторые веб-сервисы REST.
В технической документации сказано, что я должен передать хеш SHA256 какой-либо строки в запросе.
В примере запроса (в документации) строка:
HN-Rw2ZHYwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires = 1893013926label [0] = любая / somestatistics = 1d, 2d, 7d, 28d, 30d, 31d, lifetimestatus = у.п.л., livetitle = а
После выполнения:
digest = Digest::SHA256.digest(string_to_sign)
signature = Base64::encode64(digest).chomp.gsub(/=+$/, '')
приводит к хешу:
YRYuN2zO + VvxISNp / vKQM5Cl6Dpzoin7mNES0IZJ06U
Этот пример написан на ruby, так как документация предназначена для разработчиков ruby.
Я разрабатываю свое приложение на C # и для точно такой же строки, когда я выполняю:
byte[] rawHash = sha256.ComputeHash(rawRequest, 0, rawRequest.Length);
string friendlyHash = Convert.ToBase64String(rawHash);
и убираю завершающие знаки "=", получаю:
Vw8pl / KxnjcEbyHtfNiMikXZdIunysFF2Ujsow8hyiw
и, следовательно, приложение не запускается, что приводит к ошибке несоответствия подписи.
Я пытался изменить кодировку при преобразовании строки в байтовый массив, предшествующий хешированию, и ничего не изменилось.
Есть идеи?