R строка для расчета подписи - PullRequest
0 голосов
/ 18 октября 2019

Есть ли менее сложное решение для следующей задачи?

Для работы с API мне нужно вычислить сигнатуру по формуле ниже. Проблема возникает из двойных кавычек в теле запроса, они хранятся как \", а не ".

Код ниже генерирует текст 1570702210SoMeF@ke123456[{ "id": "123", "title": "foo", "version": "2019-10-10 10:10:10 } ]}SoMeF@ke123456, а правильный хеш равен "b6e783309e9d6f8ee47647373a9f6086020b3af8" при http://www.sha1 -online. com /

Формула подписи: hex (sha1 ({GMT_UNIXTIME} + {API_SECRET} + {CONTENT} + {API_SECRET})), где

  • hex () -функция, преобразующая двоичные данные в шестнадцатеричный формат
  • sha1 () - стандартная хеш-функция SHA-1, должна возвращать двоичные данные
    • конкатенация текстовых строк
  • {API_SECRET} - секретный ключ, который выдается вместе с логином {API_LOGIN}
  • {CONTENT} - тело запроса

Следующий код дает неверную подпись "c7a7ecbb0fd2d6eebfb378bdd061ea88d9fb2f69 ".

 library(stringr)
 library(lubridate)
 library(digest)


API_SECRET <- 'SoMeF@ke123456'
mstime <- ymd_hms('2019-10-10 10:10:10')
my_id <- 123
title1 <- 'foo'

request_body_json <- paste0('[{ "id": "', my_id,'", "title": "', title1, '", "version": "', mstime, '  } ]}')

rbj1 <- paste0(round(as.numeric(mstime)), API_SECRET, request_body_json, API_SECRET)

signature <- digest(rbj1, algo = "sha1")

Я вижу обходной путь с сохранением строки в файл с помощью функции cat() и вычисляю сигнатуру из файла, которая дает правильную подпись" b6e783309e9d6f8ee4764737 * 203f3af36036036366f93636036369

1 Ответ

1 голос
/ 18 октября 2019

Предотвратить сериализацию входа:

digest(rbj1, algo = "sha1", serialize = FALSE)

[1] "b6e783309e9d6f8ee47647373a9f6086020b3af8"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...