Мне нужно сгенерировать контрольную сумму для строки данных в целях согласованности. Общая идея состоит в том, что клиент может восстановить контрольную сумму на основе полезной нагрузки, которую он получает, и, таким образом, обнаружить любое повреждение, имевшее место при передаче. Я смутно осознаю, что за такими вещами лежат все виды математических принципов, и что тонким ошибкам очень легко сделать весь алгоритм неэффективным, если вы попытаетесь выполнить его самостоятельно.
Поэтому я ищу совет по алгоритму хеширования / контрольной суммы по следующим критериям:
- Он будет сгенерирован Javascript, поэтому должен быть относительно легким в вычислительном отношении.
- Проверка будет выполняться Java (хотя я не вижу в этом проблемы).
- Это займет текстовый ввод (кодированный URL-адрес Unicode, который я считаю ASCII) умеренной длины; обычно около 200-300 символов и во всех случаях ниже 2000.
- Выходные данные должны быть также в формате ASCII, и чем короче, тем лучше.
Меня в первую очередь интересует что-то более легкое, чем получение минимально возможного столкновения. Буду ли я наивным думать, что для этого подойдет хэш из восьми символов? Я также должен уточнить, что это не конец света, если коррупция не обнаружена на этапе проверки (и я действительно понимаю, что это не будет на 100% надежно), хотя остальная часть моего кода заметно менее эффективна для каждого поврежденная запись, которая проскальзывает.
Редактировать - спасибо всем, кто внес вклад. Я выбрал опцию Adler32 и, учитывая, что она изначально поддерживается в Java, чрезвычайно проста для реализации в Javascript, быстро рассчитывается на обоих концах и имеет 8-байтовый вывод, это было точно для моих требований.
(Обратите внимание, что я понимаю, что сетевой транспорт вряд ли будет нести ответственность за любые коррупционные ошибки и пока не будет складывать мне руки в этом вопросе; однако добавление проверки контрольной суммы устраняет одну точку отказа и означает, что мы можем сосредоточиться в других областях это должно повториться.)