"вы просто не умеете их готовить!" Сдаётся мне, что повторяете часть моих ошибок. 0) - терминологическая. Контрольная сумма не совсем то же, что и CRC, хотя путаница присутствует. CRC - более узкое семейство алгоритмов, а сложить все/xor/... - это контрольная сумма, но не CRC (селёдка ⊆ рыба, но не рыба ⊆ селёдка ). Мне на каком-то ресурсе напинали сильно за это, потому отложилось. Если всё же "оно" - то как уже посоветовали
здесь .
1) если вам требуется
только проверка целостности - недостаточно выполнять операцию накопление + значение[n], следует добавить какую-нить константу. Тогда результат будет
изменяться и от количества обработанных значений. У меня обычно что-то вроде
sum += 0x21 + p_u8[i];
2) у собственно CRC ещё стоит задача и восстановить информацию до какого-то вполне конкретного количества повреждённых элементов. Начинать можно с кодов Рида-Соломона в вики.
3) если важна равномерность распределения результата, то это уже хэш-функция, обзорно
здесь