Я очень новичок в контрольных суммах и довольно новичок в программировании. У меня довольно простая программа на C++ (измерение psi), которую я передаю на плату Arduino. Будет ли crc16 в порядке или я должен идти с crc32 или это будет излишним?Как выбрать правильную контрольную сумму для простой программы на C++ и как ее реализовать?
ответ
Возможный способ проверить правильность передачи исполняемого файла на вашу плату Arduino может заключаться в использовании простой контрольной суммы, такой как md5, или даже что-то еще более простое, например, некоторая грубая хеш-функция, вычисляющая 16-битный хэш. См. this answer для вдохновения.
Контрольные суммы возникают в контексте ненадежных каналов связи. Канал связи является абстракцией; биты идут в одном конце и выходят на другой конец. ненадежный канал просто означает, что выходы, которые выходят, не совпадают с теми, которые вошли.
Теперь, очевидно, самый экстремальный ненадежный канал имеет случайные биты. Это непригодно, поэтому мы фокусируемся на каналах, где коррелируются вход и выход.
Тем не менее, у нас есть много разных моделей коррупции. Одна общая модель - это каждый бит, который, вероятно, потерпит неудачу. Другая распространенная модель считает, что бит-ошибки обычно возникают в пакетах. Каждый бит затем имеет вероятность P% начать перебор ошибок длины N, в которой каждый бит равен 50%, вероятно, ошибочен. В зависимости от вашей проблемы существует еще несколько моделей - более продвинутые модели также считают, что вероятность того, что бит будет полностью отсутствовать.
Правильная контрольная сумма имеет очень и очень высокую вероятность обнаружения типа ошибки, предсказанной моделью, но может плохо работать для других типов ошибок.
Например, я думаю, что с IP-уровнем Интернета наиболее распространенной ошибкой является отсутствие всего IP-пакета. Вот почему TCP использует порядковые номера для обнаружения этой конкретной ошибки.
Для чего вы используете эту контрольную сумму? Без мотиваций мы не можем ответить на ваш вопрос. Поэтому, пожалуйста, ** отредактируйте свой вопрос **, чтобы улучшить его. –
Если ваши потребности требуют криптографически сильных дайджестов, поверьте мне: не пишите сами. используйте хорошо известную, хорошо протестированную *, криптографическую библиотеку. Если вам нужна простая crc32 или подобная некритичная проверка, вы можете ее написать, но, честно говоря, в публике так много таких вещей, я не могу себе представить, что вам нужно будет это сделать. Это во многом основано на потребностях, и только вы знаете, что нужно для вашей ситуации. – WhozCraig
Вы уверены, что «точность» - правильное слово в вашем вопросе? Вы имеете в виду «правильность»? –