Wie man SHA256 von std::string (Hex oder Binär) mit OpenSSL berechnet

Dieser Code verwendet die OpenSSL-Bibliothek, um den SHA256-Hash eines gegebenen std::string zu berechnen. Zwei Varianten werden bereitgestellt, von denen eine einen binären Hash berechnet (gibt ein std::array<uint8_t, 32> zurück), die andere einen Hex-Hash berechnet (gibt einen std::string zurück).

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);
}

Kompilieren mit

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

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