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字节的输出?
答案 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