使用 C 中的密钥生成 HMAC SHA256 哈希

新手上路,请多包涵

我正在寻找一些函数或一种使用密钥在 C++ 中返回 HMAC SHA256 哈希的方法。我看过 Crypto++ 和 OpenSSL 的文档,但它不接受用于计算的额外密钥参数。有人可以通过提供一些信息、代码片段或链接来帮助我。

原文由 RDoonds 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

HMAC 的 OpenSSL 文档清楚地说明了“密钥”的要求作为上下文初始化的一部分。

 int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int key_len,
               const EVP_MD *md, ENGINE *impl);

HMAC() 使用散列函数 evp_md 和 key_len 字节长的 密钥 计算 d 处 n 字节的消息认证码。

原文由 user2797321 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 POCO 库

示例代码:

 class SHA256Engine : public Poco::Crypto::DigestEngine
{
public:
    enum
    {
        BLOCK_SIZE = 64,
        DIGEST_SIZE = 32
    };

    SHA256Engine()
            : DigestEngine("SHA256")
    {
    }

};

Poco::HMACEngine<SHA256Engine> hmac{secretKey};
hmac.update(string);

std::cout << "HMACE hex:" << Poco::DigestEngine::digestToHex(hmac.digest()) << std::endl;// lookout difest() calls reset ;)

使用 cmake install 与 POCO 的示例集成:

 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/)

此处使用的示例实现: https ://github.com/gelldur/abucoins-api-cpp

原文由 Gelldur 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题