Разница в хэше SHA между рубином и C #

2

Я разрабатываю приложение, которое использует некоторые веб-службы 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.

Я разрабатываю свое приложение в С# и для точно такой же строки, когда я выполняю:

byte[] rawHash = sha256.ComputeHash(rawRequest, 0, rawRequest.Length);
string friendlyHash = Convert.ToBase64String(rawHash);

и удалите завершающие знаки "=", я получаю:

Vw8pl/KxnjcEbyHtfNiMikXZdIunysFF2Ujsow8hyiw

и, следовательно, приложение не выполняется, что приводит к ошибке несоответствия подписи.

Я попытался изменить кодировку, преобразовывая строку в массив байтов, предшествующий хэшированию, и ничего не изменилось.

Любые идеи?

  • 0
    Вы обрезали строку? Где-то там может быть место.
  • 0
    Можете ли вы отправить нам строку, которую вы используете. Я не могу повторить ваши результаты в рубине ..
Показать ещё 8 комментариев
Теги:
hash
sha256

1 ответ

8
Лучший ответ

На основе документа здесь вы не указали в своей строке символ - (это тире). Кажется, что Acrobat успешно удаляет его в скобке для копирования из документа...

Вот некоторый код, который я разделил вместе, который получает то же значение, что и пример (ну, если бы вы обрезали final =)

    string s = "hn-Rw2ZH-YwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires=1893013926label[0]=any/somestatistics=1d,2d,7d,28d,30d,31d,lifetimestatus=upl,livetitle=a";

    SHA256Managed sh = new SHA256Managed();
    byte[] request = System.Text.UTF8Encoding.UTF8.GetBytes(s);
    sh.Initialize();
    byte[] b4bbuff = sh.ComputeHash(request, 0, request.Length);

    string b64 = Convert.ToBase64String(b4bbuff);
  • 0
    Что ты сказал. Я должен был бы положить это в ответ.
  • 0
    Спасибо! :-) Задача решена

Ещё вопросы

Сообщество Overcoder
Наверх
Меню