Я смотрел на это весь день. Я, вероятно, должен был убежать от него несколько часов назад; я мог бы пропускать что-то очевидное в этой точке.
Короткая версия: существует ли способ генерировать и свести асимметрично зашифрованный хеш к разумному количеству однозначных, человекочитаемых символов?
Долгая версия:
Я хочу генерировать лицензионные ключи для своего программного обеспечения. Я хотел бы, чтобы эти ключи были разумной длины (25-36 символов) и легко читали и вводимый человеком (поэтому избегайте неоднозначных символов как номер 0 и прописная буква O).
Наконец - и это, кажется, строка над заголовком - я действительно хотел бы использовать асимметричное шифрование для создания более трудным генерировать новые ключи.
У меня есть общий подход: свяжите мою информацию (имя пользователя, версия продукта, соль) в строку и генерируйте SHA1 () хеш от этого, затем зашифруйте хеш с моим закрытым ключом. На клиенте создайте SHA1 () хеш от той же информации, затем дешифруйте лицензию с открытым ключом и посмотрите, есть ли у меня соответствие.
Так как это - приложение для Mac, я посмотрел на AquaticPrime, но это генерирует относительно большой файл лицензии, а не строку. Я могу работать со что, если я должен, но как пользователь мне действительно нравится удобство лицензионного ключа, который я могу считать и распечатать.
Я также посмотрел на CocoaFob, который действительно генерирует ключ, но это является таким длинным, что я хотел бы поставить его как файл так или иначе.
Я дурачился с OpenSSL некоторое время, но не мог придумать ничего разумной длины.
Так... я пропускаю что-то очевидное здесь? Существует ли способ генерировать и свести асимметрично зашифрованный хеш к разумному количеству однозначных, человекочитаемых символов?
Я открыт для покупки решения. Но я работаю в ряде различных из платформ, таким образом, я хотел бы что-то портативное. Все, на что я посмотрел до сих пор, было конкретной платформой.
Многие, большое спасибо за решение!
PS - Да, я знаю, что это будет все еще взломано. Я пытаюсь придумать что-то разумное, которое, как пользователь, я все еще нашел бы дружественным.
Я бы рассмотрел алгоритм MD5. Он широко применяется и генерирует 32-символьную буквенно-цифровую строку независимо от размера ввода. Примените алгоритм к своему хешу SHA1, и это может быть то, что вы ищете.
Обрабатывать каждый символ SHA1 как шестнадцатеричный, возможно, отбросить ненужное форматирование (тире или скобки), использовать отображение массива для преобразования 0-9A-F, как, например, AP, в произвольном порядке, используйте это как ваш "человеческий" введенный текст. MD5 предоставит вам 32 символа или несколько больше для SHA1. Отмените сопоставление символов с вашей строкой / байтами SHA1 / MD5 и продолжайте оттуда.