No busques más por todo internet ya que estás al espacio necesario, contamos con la respuesta que deseas sin liarte.
Solución:
Puedes usar la biblioteca POCO
Código de muestra:
class SHA256Engine : public Poco::Crypto::DigestEngine
public:
enum
BLOCK_SIZE = 64,
DIGEST_SIZE = 32
;
SHA256Engine()
: DigestEngine("SHA256")
;
Poco::HMACEngine hmacsecretKey;
hmac.update(string);
std::cout << "HMACE hex:" << Poco::DigestEngine::digestToHex(hmac.digest()) << std::endl;// lookout difest() calls reset ;)
Ejemplo de integración con POCO usando cmake install:
mkdir build_poco/
cd build_poco/ && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./install ../poco/
CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 3.8)
PROJECT(SamplePoco)
SET(CMAKE_CXX_STANDARD 14)
SET(SOURCE_FILES
src/main.cpp
)
SET(_IMPORT_PREFIX lib/build_poco/install)
INCLUDE(lib/build_poco/install/lib/cmake/Poco/PocoFoundationTargets.cmake)
INCLUDE(lib/build_poco/install/lib/cmake/Poco/PocoNetTargets.cmake)
INCLUDE(lib/build_poco/install/lib/cmake/Poco/PocoJSONTargets.cmake)
INCLUDE(lib/build_poco/install/lib/cmake/Poco/PocoXMLTargets.cmake)
INCLUDE(lib/build_poco/install/lib/cmake/Poco/PocoCryptoTargets.cmake)
INCLUDE(lib/build_poco/install/lib/cmake/Poco/PocoUtilTargets.cmake)
INCLUDE(lib/build_poco/install/lib/cmake/Poco/PocoNetSSLTargets.cmake)
ADD_EXECUTABLE(SamplePoco $SOURCE_FILES)
TARGET_LINK_LIBRARIES(SamplePoco
Poco::Foundation
Poco::Crypto
Poco::Util
Poco::JSON
Poco::NetSSL
)
TARGET_INCLUDE_DIRECTORIES(SamplePoco PUBLIC src/)
Ejemplo de implementación utilizada aquí: https://github.com/gelldur/abucoins-api-cpp
A continuación se muestra una muestra de la función para generar SHA256-HMAC usando Crypto++
#include
#include
#include
using CryptoPP::StringSink;
using CryptoPP::StringSource;
using CryptoPP::HashFilter;
#include
using CryptoPP::HMAC;
#include
using CryptoPP::SHA256;
std::string CalcHmacSHA256(std::string_view decodedSecretKey, std::string_view request)
// Calculate HMAC
HMAC hmac(reinterpret_cast(decodedSecretKey.data()), decodedSecretKey.size());
std::string calculated_hmac;
auto sink = std::make_unique(calculated_hmac);
auto filter = std::make_unique(hmac, sink.get());
sink.release();
StringSource(reinterpret_cast(request.data()), request.size(), true, filter.get()); // StringSource
filter.release();
return calculated_hmac;
#include
int main()
std::cout << CalcHmacSHA256("key", "data");
La fuente es la especificación CME iLink2
Los documentos de OpenSSL para HMAC establecen claramente el requisito de un 'key' como parte de la inicialización del contexto.
int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int key_len,
const EVP_MD *md, ENGINE *impl);
HMAC() calcula el código de autenticación del mensaje de los n bytes en d usando la función hash evp_md y el key key que tiene una longitud de bytes key_len.
Te mostramos las comentarios y valoraciones de los lectores
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)