Генерировать разумный лицензионный ключ длины с асимметричным шифрованием?

Я смотрел на это весь день. Я, вероятно, должен был убежать от него несколько часов назад; я мог бы пропускать что-то очевидное в этой точке.

Короткая версия: существует ли способ генерировать и свести асимметрично зашифрованный хеш к разумному количеству однозначных, человекочитаемых символов?

Долгая версия:

Я хочу генерировать лицензионные ключи для своего программного обеспечения. Я хотел бы, чтобы эти ключи были разумной длины (25-36 символов) и легко читали и вводимый человеком (поэтому избегайте неоднозначных символов как номер 0 и прописная буква O).

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

У меня есть общий подход: свяжите мою информацию (имя пользователя, версия продукта, соль) в строку и генерируйте SHA1 () хеш от этого, затем зашифруйте хеш с моим закрытым ключом. На клиенте создайте SHA1 () хеш от той же информации, затем дешифруйте лицензию с открытым ключом и посмотрите, есть ли у меня соответствие.

Так как это - приложение для Mac, я посмотрел на AquaticPrime, но это генерирует относительно большой файл лицензии, а не строку. Я могу работать со что, если я должен, но как пользователь мне действительно нравится удобство лицензионного ключа, который я могу считать и распечатать.

Я также посмотрел на CocoaFob, который действительно генерирует ключ, но это является таким длинным, что я хотел бы поставить его как файл так или иначе.

Я дурачился с OpenSSL некоторое время, но не мог придумать ничего разумной длины.

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

Я открыт для покупки решения. Но я работаю в ряде различных из платформ, таким образом, я хотел бы что-то портативное. Все, на что я посмотрел до сих пор, было конкретной платформой.

Многие, большое спасибо за решение!

PS - Да, я знаю, что это будет все еще взломано. Я пытаюсь придумать что-то разумное, которое, как пользователь, я все еще нашел бы дружественным.

6
задан starkos 28 April 2010 в 00:35
поделиться

2 ответа

Я бы рассмотрел алгоритм MD5. Он широко применяется и генерирует 32-символьную буквенно-цифровую строку независимо от размера ввода. Примените алгоритм к своему хешу SHA1, и это может быть то, что вы ищете.

-1
ответ дан 18 December 2019 в 04:49
поделиться

Обрабатывать каждый символ SHA1 как шестнадцатеричный, возможно, отбросить ненужное форматирование (тире или скобки), использовать отображение массива для преобразования 0-9A-F, как, например, AP, в произвольном порядке, используйте это как ваш "человеческий" введенный текст. MD5 предоставит вам 32 символа или несколько больше для SHA1. Отмените сопоставление символов с вашей строкой / байтами SHA1 / MD5 и продолжайте оттуда.

0
ответ дан 18 December 2019 в 04:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: