Я пишу небольшую систему, которая позволит мне продавать музыку моей группы на концертах, генерируя ваучеры, которые можно обменять на MP3 на нашем сайте.
Ваучерам потребуется код, который вводит пользователь. Код должен обладать следующими качествами:
- Некоторый уровень читабельности для человека с точки зрения длины и содержания, чтобы предотвратить недовольство пользователя и ошибку при вводе данных.
- Учитывая один код ваучера, нетривиально угадать другой код ваучера.
Если я использую GUID, меня беспокоит пункт 1. Если я использую возрастающее целое число, меня беспокоит пункт 2. Между ними должен быть какой-то счастливый посредник, верно? Я подумал, что, возможно, эта работа уже выполнена, и меня ждет идеальное решение. В отсутствие этого я думаю, что я пойду со случайной буквенно-цифровой строкой или, возможно, только буквами (исключая I и O для ясности), и получу IP-адреса блока приложения, которые не пройдут X раз, что указывало бы возможная атака грубой силы. Если бы я пошел с этим, сколько длины строки и какое значение X будет работать и почему?
Спасибо за вашу помощь!
Обновление: у меня не было полной ясности в отношении метода: я буду генерировать списки кодов ваучеров для печати, а затем вводить «проданные» коды после концерта. Поэтому я думаю, что такие элементы, как контрольная сумма, не нужны, как в программных ключах, которые не используют серверы проверки.