По крайней мере, в типичном алгоритме шифрования с открытым ключом (например, RSA) на самом деле нет большой разницы между открытым и закрытым ключом. Когда вы генерируете ключи, вы получаете два ключа. Вы оставляете одну личную и публикуете другую, но не имеет большого значения, какую вы публикуете, а какую - частную.
Все, что вы шифруете одним ключом, можно расшифровать другим ключом. В обычных целях вы публикуете один ключ, который позволяет любому зашифровать то, что может расшифровать только вы. С технической точки зрения обратное работает нормально: если вы зашифровываете что-то с помощью своего закрытого ключа, любой с открытым ключом может расшифровать его. Обычно это используется для проверки подписи (т. Е. Любой, у кого есть открытый ключ, может проверить, что подпись была создана с помощью закрытого ключа). Обычно вы хотите использовать отдельные пары ключей для шифрования и подписи.
В вашем случае это вопрос, который вы действительно собираетесь выполнить. Вы, конечно, можете зашифровать некоторые данные, необходимые для использования программы, поэтому пользователю нужен ключ, чтобы расшифровать его и использовать программу - но если пользователь хочет передать копию кода неуполномоченному лицу они, вероятно, не будут стесняться давать копию ключа им также. Таким образом, даже несмотря на то, что шифрование / дешифрование сработает, оно вряд ли обеспечит какую-либо реальную защиту.
Более типичная схема лицензирования связана с чем-то вроде определенного IP-адреса, поэтому вы делаете что-то вроде шифрования IP-адреса, а затем используете результат в качестве ключа для дешифрования данных, необходимых для использования программы. Если IP-адрес неправильный, данные не расшифрованы правильно, и программа не работает. Пока у пользователя есть статический IP-адрес, он может работать хорошо, но будет вызывать проблемы в сочетании с DHCP.
Мой немедленный совет - просто не делать этого вообще. Если вы все же настаиваете на том, чтобы делать это, не делайте этого сами - получите что-то вроде FlexNet , чтобы справиться с этим за вас. Без этого вам лучше, но, по крайней мере, таким образом вы получите что-то, что работает , , и вы не будете тратить на это время и силы, которые могли бы быть направлены на улучшение ваших целей, таких как улучшение программное обеспечение.