少なくとも、一般的な公開鍵暗号化アルゴリズム (RSA など) では、公開鍵と秘密鍵の間に大きな違いはありません。キーを生成すると、2 つのキーが得られます。一方を非公開にし、もう一方を公開しますが、どちらを公開し、どちらを非公開にするかは問題ではありません。
1 つのキーで暗号化したものはすべて、もう 1 つのキーで復号化できます。通常の目的では、1 つの鍵を公開します。これにより、誰でも自分だけが復号化できるものを暗号化できます。ただし、技術的な観点からは、その逆も問題なく機能します。秘密鍵で何かを暗号化すると、公開鍵を持っている人なら誰でもそれを復号化できます。これは通常、署名の検証などに使用されます (つまり、公開鍵を持っている人なら誰でも、署名が秘密鍵で作成されている必要があることを検証できます)。ただし、通常は、暗号化と署名に別々のキー ペアを使用する必要があります。
あなたの場合、あなたが実際に何を達成しようとしているのか、いくつかの疑問が生じます。プログラムを使用するために必要な一部のデータは確かに暗号化できるため、ユーザーはそれを復号化してプログラムを使用するためのキーが必要になります。彼らにも鍵のコピーを渡すのを躊躇します。そのため、暗号化/復号化は機能しますが、実際の保護を提供することはほとんどありません.
より一般的なライセンス方式は、特定の IP アドレスなどに関連付けられているため、IP アドレスを暗号化するなどの処理を行い、その結果をキーとして使用して、プログラムを使用するために必要なデータを復号化します。IP アドレスが間違っていると、データが正しく復号化されず、プログラムが動作しません。ユーザーが静的 IP アドレスを持っている限り、これはうまく機能しますが、DHCP と組み合わせて問題を引き起こす可能性があります。
私の当面のアドバイスは、これをまったく行わないことです。どうせやりたがるなら、自分でやらないでください。FlexNetのようなものを手に入れてください。それがなくても良いのですが、少なくともこの方法では、そのような機能を得ることができ、ソフトウェアの改善などのより良い目的に費やすことができる時間と労力を無駄にすることはありません.