Как уже упоминалось в других ответах, следующие вызовы будут вычислять хеш:
MD5Context md5;
MD5Init(&md5);
MD5Update(&md5, data, datalen);
MD5Final(digest, &md5);
Цель разделения его на множество функций - позволить вам передавать большие наборы данных.
Например, если вы хэшируете файл размером 10 ГБ, и он не вписывается в оперативную память, вот как вы можете это сделать.Вы читаете файл небольшими порциями и вызываете MD5Update
для них.
MD5Context md5;
MD5Init(&md5);
fread(/* Read a block into data. */)
MD5Update(&md5, data, datalen);
fread(/* Read the next block into data. */)
MD5Update(&md5, data, datalen);
fread(/* Read the next block into data. */)
MD5Update(&md5, data, datalen);
...
// Now finish to get the final hash value.
MD5Final(digest, &md5);