Я работаю над проектом, который включает в себя запись низкоуровневого программного обеспечения C для аппаратной реализации. Мы хотим внедрить новую функцию для наших устройств, которую наши пользователи могут разблокировать при покупке соответствующего лицензионного ключа.
Желаемые шаги реализации просты. Пользователь вызывает нас, они запрашивают эту функцию и отправляет нам платеж. Затем мы посылаем им по электронной почте ключ продукта, который они вводят в свое оборудование, чтобы разблокировать эту функцию.
Наше оборудование не подключено к Интернету. Поэтому алгоритм должен быть реализован таким образом, чтобы эти ключи могли быть созданы как на сервере, так и внутри устройства. Семена для ключей могут быть получены из серийного номера оборудования, который доступен в обоих местах.
Мне нужен простой алгоритм, который может принимать последовательные числа и генерировать уникальные, не последовательные ключи из 16-20 буквенно-цифровых символов.
UPDATE
SHA-1 выглядит как лучший способ. Однако то, что я вижу из образца вывода ключей SHA-1, состоит в том, что они довольно длинны (40 символов). Получил бы ли я достаточные результаты, если бы я взял 40 char и, скажем, усекал все, кроме последних 16 символов?