OpenSSL:EVP_DigestFinal_ex的输出大小是否大于摘要大小?

时间:2015-08-25 14:15:46

标签: hash openssl sha digest message-digest

OpenSSL EVP_DigestFinal_ex包含以下文档:

“EVP_DigestFinal_ex()从ctx中检索摘要值并将其放在md中。如果s参数不为NULL,则写入的数据的字节数(即摘要的长度)将写入s处的整数,最多将写入EVP_MAX_MD_SIZE个字节。“

签名:

int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s);

是否存在摘要长度大于摘要的输出大小但小于EVP_MAX_MD_SIZE的情况。即对于SHA-1摘要,我得到一个大于20字节的输出?

1 个答案:

答案 0 :(得分:2)

OpenSSL crypto/evp/digest.c的相关源代码:

    OPENSSL_assert(ctx->digest->md_size <= EVP_MAX_MD_SIZE);
    ret = ctx->digest->final(ctx, md);
    if (size != NULL)
       *size = ctx->digest->md_size;

其中 size 是您想要的输出摘要大小,摘要 const 结构,如果在{{{ 3}}:

static const EVP_MD sha1_md = {
     NID_sha1,
     NID_sha1WithRSAEncryption,
     SHA_DIGEST_LENGTH

md_size是此结构的第三个成员,因此它始终为 SHA_DIGEST_LENGTH ,即crypto/evp/m_sha1.c 20