OpenSSL 用SM3算法进行hash

OpenSSL 用SM3算法进行hash

如果需要使用 SM3 Hash 操作,则需要使用1.1.1以上版本的OpenSSL。

主要是用到了 Openssl EVP (high-level cryptographic functions),它提供了丰富的密码学中的函数。

具体实现:

#include 
#include 

bool openssl_sm3_hash(const vector& input,
unsigned char* buffer,
unsigned int* buf_len)
{
    if (input.empty())
    return false;

    memset(buffer, 0, *buf_len);

    EVP_MD_CTX* ctx = EVP_MD_CTX_new();

    // 设置使用SM3
    if (!EVP_DigestInit_ex(ctx, EVP_sm3(), NULL)) {
        cout << "Failed to init" << endl;
        return false;
    }

    for (const auto& i: input) {
        if (!EVP_DigestUpdate(ctx, i.c_str(), i.size())) {
        cout << "Failed to update" << endl;
        return false;
        }
    }

    if (!EVP_DigestFinal_ex(ctx, buffer, buf_len)) {
        cout << "Failed to final" << endl;
        return false;
        }

    EVP_MD_CTX_free(ctx);
    return true;
}

你可能感兴趣的:(c/c++,哈希算法,算法)