1. ホーム
  2. c#

[解決済み】ソフトウェアのライセンスキーを生成して検証する方法は?

2022-04-04 11:16:06

質問

現在、ある製品(C#で開発)の開発に携わっています。この製品は無料でダウンロードおよびインストールできますが、非常に限定されたバージョンです。すべての機能を利用するためには、ユーザーはライセンス料を支払ってキーを受け取らなければなりません。このキーをアプリケーションに入力することで、フルバージョンのロックを解除することができます。

ライセンスキーを使うのは普通だと思うのですが、どうなんでしょう?

  1. 通常、どのように解決するのですか?
  2. キーを生成し、それをアプリケーションで検証するにはどうすればよいですか?
  3. また、キーがインターネット上で公開され、ライセンスを支払っていない他の人に使用されるのを防ぐにはどうしたらよいですか(基本的にキーは彼らのものではありません)。

また、キーとアプリケーションのバージョンを関連付けることで、機能バージョンアップの際に新しいキーに課金することも可能になると思うのですが。

このシナリオで他に考えるべきことはありますか?

解決方法は?

警告:ユーザーが海賊行為をするのを防ぐことはできませんが、正直なユーザーが正しいことをするのを容易にすることだけはできます。

ユーザーごとに特別なビルドをしないとして、では。

  • 製品用のシークレットキーを自分で生成する
  • ユーザーの名前を取る
  • ユーザー名と秘密鍵を連結し、SHA1などでハッシュ化します。
  • SHA1ハッシュを英数字の文字列として解凍します。これが各ユーザーのプロダクトキーです。
  • プログラム内で、同じようにハッシュ化し、プロダクトキーと比較します。等しければ、OK。

でも、繰り返す。 海賊版を防ぐことはできません。


最近、この方法は暗号学的にあまり健全ではない、という記事を読みました。しかし、この解決策はすでに弱いです( ソフトウェア自体が秘密鍵をどこかに入れなければならないので ) ので、この発見がこの解決策を限りなく無効にするとは思えません。

ただ、これだけは言っておかないといけないと思ったのは、ここから何かを導き出そうと考えている人は、要注意だということです。