Необходимо защитить от взлома или просто достаточно просто проверки лицензии?
Если первое - то это дорого и долго и один фиг 100% защиту создать невозможно. Если второе, то тупо создать какую то структуру, которая содержит всю информацию о лицензии, потом сериализовать ее в бинарный формат, после чего сформировать подпись, используя закрытый ключ, подпись тоже сериализовать и добавить к основному тексту. Полученный массив байт преобразовать в base64 или что то подобное - это будет лицензионный ключ. В приложение зашить открытый ключ и с помощью него проверять корректность подписи. Если подпись корректна, то можно проверять и тело ключа, например, на предмет окончания срока его действия. Примерно так работает абсолютное большинство проверок лицензии,но тут есть и минус - простой подменой публичного ключа в коде программы пользователь может заставить ее работать со своим ключём (примерно так кейгены работают - они патчат приложение и потом генерируют ключ, который будет валиден для нового открытого ключа). Задачу взлома можно усложнить, шифруя публичный ключ, разделяя его на блоки, используя всякую математику и пр. Но это уже выходит за рамки "простого" вопроса