Мне не нужно, чтобы это было слишком безопасно. Даже md5, который, как правило, сломан, безопаснее, чем мне нужно (если столкновение не может быть найдено в течение 2 минут, оно должно быть на 100% нормально).
Мне это нужно для видеоигры, которую мы устроим на хакатоне в эти выходные. У нас есть сервер, который будет имитировать основные части игры, и нам нужно синхронизировать нескольких игроков (мы используем socket.io и nodejs в качестве сервера комет) и убедиться, что ни один игрок не изменяет, изменяя значения. Таким образом, контрольная сумма (если они отправят действительную контрольную сумму, которая будет сравниваться с той, которая была сгенерирована на сервере, у пользователя есть нужные данные).
Итак, пока контрольная сумма не слишком легко реверсизируется, все должно быть в порядке.
Кроме того, поскольку у меня нет большого опыта работы с онлайн-играми (хотя я некоторое время использовал сокеты в C, Java, Python и даже PHP), было бы здорово, если бы кто-то мог порекомендовать некоторые чтения по общим шаблонам последовало. Все, что я нашел, было документом, объясняющим, почему онлайн Age of Empires 2 вроде как засосал:)
Большое спасибо
Дополнительная разработка:
У каждого клиента есть переменные (объекты со свойствами и т. Д.). События происходят у клиента, и поэтому состояния меняются. В зависимости от состояний переменные меняются. Итак, клиент отправляет состояния и хэш переменных на сервер. Сервер принимает новые состояния от клиента (которые могут быть, например, «нажата стрелка вправо»), проверяет, являются ли они действительными, и затем генерирует новые значения для переменных. Проверяет, соответствует ли хэш тому, который отправил клиент. Если это не так, он отправляет сообщение синхронизации клиенту, давая ему новые значения в своих переменных. Затем сохраняет все это и отправляет обновления другим клиентам по общим переменным. (поскольку не все переменные видны другим клиентам)
Хеширование в основном для синхронизации. Я не знаю, лучший ли это метод, но это то, что пришло на ум. Тем не менее, я не хочу, чтобы укол связывался со значениями, если они представляют собой просто контрольную сумму (например, CRC32) и не являются чем-то более сложным для подделки. Таким образом, я чувствую, что синхронизация будет проще.
Опять же, у меня нет опыта работы с сетями в видеоиграх, но из других вещей, которые я сделал, это звучало логично. Я ценю все отзывы.