Мой проект должен подключиться к Azure Cosmo DB через REST API. Соединение Azure Cosmo DB требует передачи подписи HMACSHA256 в заголовок HTTP. Я попытался использовать функцию THashSHA2.GetHMAC (Data, Key) в Delphi 10.2, чтобы получить эту подпись. Чтобы проверить результат, я запускаю пример кода на C # (скачанный с MS), чтобы проверить результат, сгенерированный Delphi. К сожалению, они не одинаковы!
C #: 2LuKbSl8RkLc0eKhjQv4oCpXzRcmR02L9sDfSxSB5HA =
Delphi: 2ca409c9a26aa3ed6c772b6bda5bbe66bcd0d929c3ca4359f19ea42314437e5a
Я проверяю результат Delphi с помощью онлайн-генератора HMACSHA256. Delphi правильно.
Я искал в Интернете, чтобы найти другой способ создания подписи. Я получил TIdHMACSHA256 (используя IdSSLOpenSSL.LoadOpenSSLLibrary). Я попробовал код, но тоже не повезло. Результат (96OyCOmXzODAP9CljJgleuG5J5c4nIDeiSlr3hdcpYY =) также не совпадает с результатом, сгенерированным C #.
Я заметил, что код C # запускает Convert.FromBase64String (key), чтобы преобразовать ключ в байт, сгенерировать хеш, а затем Convert.ToBase64String (hashPayLoad) в подпись. Я подозреваю, что неправильный результат в Delphi пропускает подобные шаги. Но я не знаю, как это сделать.
У кого-нибудь есть опыт создания подписи Azure Cosmo DB в Delphi? Пожалуйста помоги!