回答:
パスワードを保存する場合とほぼ同じです。ジェネレーターとプログラムのみが知っている固有の秘密鍵が必要です。このキーを使用して詳細(ユーザー名、パスワード、組織など)を操作し、ハッシュします。次に、ハッシュに対してBase32で何か簡単な転送エンコードを行うか、形式を気にしない場合は単純に16進文字列に移動します。
それらを実装する際に注意すべきことはありますか?
秘密を秘密にしておきます。実装を改善可能にします。誰かがそれを壊した場合、簡単に実装を変更できますか?デスクトップアプリケーションでの一般的な実装の1つは、リモートサーバーを使用してライセンスを検証することです。これにより、アプリケーション自体を検査することにより、誰かがハッシュまたはアルゴリズムをリバースエンジニアリングできる可能性がなくなります。
私が推奨する方法は、10,000個のランダムライセンス文字列を生成し、SHA1(またはMD5)ハッシュまたはHMACハッシュし、実行可能ファイル自体にSHA1 / MD5ハッシュのすべてまたは一部を含めることです。ライセンス文字列が入力されると、難読化されたコードを使用して文字列のハッシュを生成し、リスト内のハッシュと比較します。一致する場合、有効なライセンスです。ライセンスが不足している場合は、文字列を増やして新しいバージョンをリリースしてください。
SHA1ハッシュの最初の96ビットだけを使用するのが適切です。したがって、10,000ライセンスは120KB未満で済みます。キーのアルゴリズムによる生成またはキージェネレータの作成は不可能です。心配する必要がある唯一の脆弱性は、リバースエンジニアリングまたはバイパスです。(または、有効なキーを配布している人。)