Функция хеширования с частично реверсивной частью - PullRequest
1 голос
/ 26 августа 2010

Существует ли какой-либо известный алгоритм хеширования, который для аналогичного ввода возвращает аналогичный вывод? Мне это нужно для создания «билетов» без проверки их по БД. Моя идея состоит в том, что я создаю перенос токена (userID и timestamp) (необратимый), и передаю этот токен вместе с userID, и могу проверить, если токен дал UserID и, например, был создан 10 минут назад

например, изменение первых 4 байтов дает существенно разные токены, но с изменением последних 4 байтов функция хеширования возвращает похожие токены.

1 Ответ

2 голосов
/ 26 августа 2010

Hm. Я бы, наверное, попробовал HMACs : создать секретный ключ, известный только вашему приложению. Всякий раз, когда вам нужно раздать новый «билет»,

  • объединить идентификатор пользователя и метку времени (скажем, с использованием сериализованных представлений)
  • создайте дайджест HMAC, используя «секретный ключ» в качестве ключа подписи

Затем раздайте тройку (идентификатор пользователя, метка времени, дайджест) другим лицам. Чтобы получить такой билет, просто сделайте то же самое:

  • извлечь идентификатор пользователя и метку времени из тройки.
  • генерирует HMAC, как описано выше, из этой информации

Сгенерированные дайджесты должны совпадать, в противном случае кто-то попытался представить вам поддельный билет. Это безопасно, поскольку только ваше приложение знает секретный ключ и, следовательно, может генерировать подходящий дайджест HMAC. Поскольку информация о временной метке возвращается к вам, вы можете выполнить все необходимые тесты в отношении какого-либо временного окна или чего-либо другого.

...