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