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 に答える