SHA-1 и (в последнее время SHA-2) обеспечивают отличные функции хеширования, и я считаю, что они медленно вытесняют MD5 из-за лучших свойств хеширования. Все они (md2, sha и т. Д.) Имеют эффективные реализации и возвращают хэш буфера длиной в несколько символов (хотя всегда фиксированной длины). доказуемо более надежны, чем сокращение хеша до целого числа. Если бы у меня были мои барабанщики, я бы использовал SHA-2. Следуйте по этой ссылке для библиотек, которые реализуют контрольные суммы SHA.
Если вы не хотите компилировать в этих библиотеках, linux (и, вероятно, cygwin) имеет следующие исполняемые файлы: md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum; к которому вы можете предоставить свой файл, и они будут распечатывать контрольную сумму в виде шестнадцатеричной строки.
Вы можете использовать popen для выполнения этих программ, например:
const int maxBuf=1024;
char buf[maxBuf];
FILE* f = popen( "sha224sum myfile", "w" );
int bytesRead = f.read( buf, maxBuf );
fclose( f );
Очевидно, что это будет работать намного медленнее, но это сделает полезный первый проход.
Если скорость является проблемой, учитывая, что операции хеширования файлов, подобные этой, и ограничения ввода / вывода (память и доступ к диску будут для вас узкими местами), я ожидаю, что все эти алгоритмы будут работать примерно так же быстро, как и для беззнакового целого. Perl и Python также поставляются с реализациями MD5 SHA1 и SHA2 и, вероятно, будут работать так же быстро, как в C / C ++.