Saltar al contenido

Generar hash HMAC SHA256 usando key en C++

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)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *