6

今天看到一个表单的函数原型(为了完整起见,添加了几行开头)

typedef unsigned char md5_byte_t; /* 8-bit byte */
typedef unsigned int md5_word_t; /* 32-bit word */
/* Define the state of the MD5 Algorithm. */
typedef struct md5_state_s {
    md5_word_t count[2];    /* message length in bits, lsw first */
    md5_word_t abcd[4];     /* digest buffer */
    md5_byte_t buf[64];     /* accumulate block */
} md5_state_t;

void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);

这已经采取了 L. Peter Deutsch 的md5 实现形式。据我所知,写16在原型中没有任何意义。那么为什么包含在这里

这是否只是向程序员表明,无论您传递给函数的指针或数组,它只会考虑它的前 16 个字节。它在这里实际上意味着什么。这是github 上托管的实现的链接

4

1 回答 1

7

在实践中,它会衰减到

void md5_finish(md5_state_t *pms, md5_byte_t *digest);

16可能是对用户摘要使用的大小的提示,但从技术上讲,该函数将接受参数中的任何大小,除非函数中有代码检查某个大小。

于 2012-07-16T17:52:25.593 回答