MD5 - хороший хеш-код для вещей, где безопасность не является проблемой.Он быстрый и достаточно длинный (для большинства приложений достаточно 128 бит).Кроме того, распределение очень хорошее.
Adler32 будет возможной альтернативой.Это очень легко реализовать, всего несколько строк кода.Это даже быстрее, чем MD5.И это достаточно долго / достаточно хорошо для многих приложений (хотя для многих это не так).(Я знаю, что Adler32 строго не является хеш-кодом, но он все равно подойдет для многих приложений)
Однако, если хранение хеш-кода занимает много памяти, вы всегда можете урезать хеш-код.код или используйте XOR, чтобы «сжать» его.Например,
uint8_t md5[16];
GetMD5(md5, ...);
// use XOR to shrink the MD5 to 32 bits
for (size_t i = 4; i < 16; i++)
md5[i % 4] ^= md5[i];
// assemble the parts into one uint32_t
uint32_t const hash = md5[0] + (md5[1] << 8) + (md5[2] << 16) + (md5[3] << 24);
Лично я думаю, что MD5 будет излишним.Посмотрите на Adler32 , я думаю, что это подойдет.
EDIT
Я должен исправить себя: Adler23 довольноплохой выбор для коротких строк (менее нескольких тысяч байт).Я полностью забыл об этом.Но всегда есть очевидное: CRC32.Не так быстро, как Adler23 (примерно с той же скоростью, что и MD5), но все еще приемлемо прост в реализации, а также существует масса существующих реализаций со всеми видами лицензий.