Реализация HMAC-SHA256 с помощью opensslC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Реализация HMAC-SHA256 с помощью openssl

Сообщение Anonymous »

Я пытаюсь использовать HMAC-SHA256 с использованием openssl в C++.
Я дважды проверяю свои выходные данные с помощью кода Python, который, похоже, доказывает, что что-то не так... Удивительно, но я могу хэшировать с помощью HMAC-SHA384 и HMAC-SHA512 (все еще дважды проверяя свой код Python)
Может кто-нибудь любезно указать мне, что я делаю неправильно ?
Мой код:

Код: Выделить всё

static std::vector hmac_sha256(const std::vector& data, const std::vector& key)
{
unsigned int len = EVP_MAX_MD_SIZE;
std::vector digest(len);

HMAC_CTX ctx;
HMAC_CTX_init(&ctx);

HMAC_Init_ex(&ctx, key.data(), key.size(), EVP_sha256(), NULL);
HMAC_Update(&ctx, data.data(), data.size());
HMAC_Final(&ctx, digest.data(), &len);

HMAC_CTX_cleanup(&ctx);

return digest;
}
Моя реализация HMAC-SHA384 и HMAC-SHA512 отличается от приведенной выше только изменением EVP_sha256() на EVP_sha384() и EVP_sha512()...
Пример: message = "azertyAZERTY", key = "vzxgPuegSjRksLnCAu/LElxWRonjVkCoArWzZqliiSEtmlbaCfZaGkrSweWJKQkgQsyrBUpSusAcPcGDfFhWOx==" (перед использованием в моей функции этот код должен быть декодирован в формате b64).
Следующая реализация Python

Код: Выделить всё

import json, hmac, hashlib, time, requests, base64 from requests.auth import AuthBase

message = "azertyAZERTY"
hmac_key = base64.b64decode("vzxgPuegSjRksLnCAu/LElxWRonjVkCoArWzZqliiSEtmlbaCfZaGkrSweWJKQkgQsyrBUpSusAcPcGDfFhWOx==")

signature256 = hmac.new(hmac_key, message, hashlib.sha256)
print('signature 256 : ' +
signature256.digest().encode('base64').rstrip('\n'))
signature384 = hmac.new(hmac_key, message, hashlib.sha384)
print('signature 384 : ' +
signature384.digest().encode('base64').rstrip('\n'))
signature512 = hmac.new(hmac_key, message, hashlib.sha512)
print('signature 512 : ' +
signature512.digest().encode('base64').rstrip('\n'))
возвращает

Код: Выделить всё

signature 256 : tfnYBB630T/8TemIeNMSSTuY12eJMmel55ZWaRAEq/w=
signature 384 : irWXsFWoNREZddkTRDzPFgyhyiLoIt8uoi0Kpxw4GgYSfSnILXLdQu0HuM5qN4Zb
signature 512 : DU+sAkJnJBqY1QPwJRmwCK/vdACwKfysz+PetdsmvlmgRlK8Ad1tbHsjvRs/By2PR7uWEngXGjocTgqjDGMTFw==
в то время как моя реализация на C++

Код: Выделить всё

std::string secret = "vzxgPuegSjRksLnCAu/LElxWRonjVkCoArWzZqliiSEtmlbaCfZaGkrSweWJKQkgQsyrBUpSusAcPcGDfFhWOx==";

std::vector v = b64_decode(secret);
std::string message = "azertyAZERTY";
std::vector data(message.begin(), message.end());
std::vector v = b64_decode(secret);

std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/46864606/hmac-sha256-implementation-with-openssl[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»