amazon s3 — Как мне скопировать хеш-функцию PHP SHA1 в .net-core для подписания запроса AWS S3 V2

У меня есть существующая функция PHP, которая вручную подписывает http-запрос AWS S3, созданный на основе JavaScript, используя протокол подписи версии 2, который теперь мне нужно реплицировать в .net-core v2.0.

Функция php использует встроенные функции

base64_encode(hash_hmac('sha1',$message,$key,true));

подписать message используя key, true param передает необработанный двоичный хэшированный вывод в кодировщик base64

Я пытался воспроизвести hash_hmac() функция в .net-core

private static byte[] hash_hmac(string message, string key)
{
UTF8Encoding encoding = new UTF8Encoding();
Byte[] messageBytes = encoding.GetBytes(message);
Byte[] keyBytes = encoding.GetBytes(key);

Byte[] hashBytes;

using (HMACSHA1 hash = new HMACSHA1(keyBytes))
hashBytes = hash.ComputeHash(messageBytes);

return hashBytes;
}

и выходные данные хеш-функций SHA1 (сравнивая десятичное значение каждого байта в массиве), когда передаются идентичные сообщение и ключ, различаются.

Куда я иду не так?

Я не нашел никаких примеров .net-core для подписания запросов S3 и не нашел утилиты в AWS S3 SDK, которую я мог бы использовать (в виде библиотеки или фрагмента кода). Я знаю, что рекомендуется версия 4, а SHA1 — нет.

РЕДАКТИРОВАТЬ: Добавлен пример:

key: "fC+MbKash6koR/DjrB4bP9Sjc2L38ADqxsor8KW+"message: "This is my message to sign"

Ord () каждого байта в php hash_hmac имеет вид

183 250 242 111 104 14 103 87 237 80 69 21 99 221 240 130 137 84 57 103 0

Когда я использую мои .net-core hash_hmac () и ToString () для каждого байта, я получаю

183 250 242 111 104 14 103 87 237 80 69 21 99 221 240 130 137 84 57 103

Идентичный, за исключением дополнительного 0 байт в версии php.

Что вызвало бы это?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]