如何使用 OpenSSL 计算 std::string 的 SHA256(十六进制或二进制)

此代码使用 OpenSSL 库计算给定 std::string 的 SHA256 哈希。提供了两种变体,一种计算二进制哈希(返回 std::array<uint8_t, 32>),另一种计算十六进制哈希(返回 std::string)。

sha256_example.cpp
#include <string>
#include <openssl/sha.h>

template<typename T>
std::string convertToHex(const T& binaryResult)
{
    std::ostringstream ss;
    ss << std::hex << std::setfill('0');
    for (unsigned int i = 0; i < binaryResult.size(); ++i) {
        ss << std::setw(2) << static_cast<unsigned>(binaryResult.at(i));
    }

    return ss.str();
}

std::array<uint8_t, 32> computeSHA256(const std::string& input) {
    std::array<uint8_t, 32> hash{};

    EVP_MD_CTX* mdctx = EVP_MD_CTX_new();
    const EVP_MD* md = EVP_sha256();

    EVP_DigestInit_ex(mdctx, md, nullptr);
    EVP_DigestUpdate(mdctx, input.c_str(), input.length());
    EVP_DigestFinal_ex(mdctx, hash.data(), nullptr);

    EVP_MD_CTX_free(mdctx);
    return hash;
}

std::string computeSHA256Hex(const std::string& input) {
    auto hash = computeSHA256(input);
    return convertToHex(hash);
}

使用以下命令编译

build_sha256.sh
g++ -o main main.cpp -lcrypto -lssl

Check out similar posts by category: C/C++, Cryptography