私が最初にこの回答を書いたとき、それはライセンスキーの「オフライン」検証に関する質問であるという仮定の下でした。他のほとんどの回答はオンライン検証に対応しています。これは処理が大幅に簡単です(ほとんどのロジックはサーバー側で実行できます)。
オフライン検証で最も難しいのは、膨大な数の一意のライセンスキーを生成し、簡単に侵害されない強力なアルゴリズム(単純なチェックデジットなど)を維持できるようにすることです。
私は数学にはあまり詳しくありませんが、これを行う1つの方法は、グラフをプロットする数学関数を使用することです
プロットされた線は、(十分に細かい周波数を使用する場合)数千の一意のポイントを持つことができるため、そのグラフでランダムなポイントを選択し、何らかの方法で値をエンコードすることでキーを生成できます
例として、このグラフをプロットし、4つのポイントを選択して、「0、-500; 100、-300; 200、-100; 100,600」として文字列にエンコードします
文字列を既知の固定キー(非常に弱いが目的にかなう)で暗号化し、結果のバイトをBase32で変換して最終的なキーを生成します
次に、アプリケーションはこのプロセスを逆にして(base32から実数、ポイントを復号化、デコード)、それらの各ポイントがシークレットグラフ上にあることを確認します。
非常に少量のコードにより、膨大な数の一意で有効なキーを生成できます。
しかし、それはあいまいさによる非常にセキュリティです。時間をかけてコードを逆アセンブルする人なら誰でもグラフ作成関数と暗号化キーを見つけて、キージェネレーターをモックアップできますが、おそらく海賊行為の速度を落とすのに非常に役立ちます。