C#のライセンスの開発 - どこから始めますか? [閉まっている
-
04-10-2019 - |
質問
C#でライセンスモデルを開発するために推奨できる標準やリソースがあるかどうかを知りたいですか?
解決
C#では、を使用できます ライセンスクラス Microsoftが提供。リンクからサンプルを利用できます。
基本的に、ライセンスプロバイダーから継承するクラスを作成し、
[LicenseProvider(typeof(MyControlLicenseProvider))]
ライセンスを取得したいクラスへの属性として。実装で(MyControlLicenseProvider
)あなたはあなたのニーズに合わせてライセンスを検証するための適切な方法をコーディングして、あなたのコード呼び出しを持たせることができます
License license = LicenseManager.Validate(typeof(MyControl), this);
ライセンスがない場合、アプリケーション/コントロールがライセンスされています。
グレイスターirが述べているように、システムは愚かなものではなく、必要なスキルを持っている人があなたの検証を中心に自分自身を元気づけることができます。ロックハードシステムを実装するのに何時間も費やさないでください。ただし、簡単に回避できないようにしないでください。 :-)
SHAのようなハッシュまたはMDハッシュ関数の1つを使用して、それらにフィードするいくつかの重要なデータを使用して、簡単な検証チェックを作成できます。あなたの検証方法は、
public override License GetLicense(LicenseContext context,
Type type,
object instance,
bool allowExceptions)
if (context.UsageMode == LicenseUsageMode.Designtime) {
// Creating a special DesigntimeLicense will able you to design your
// control without breaking Visual Studio in the process
return new DesigntimeLicense();
}
byte[] existingSerialKey = getExistingSerial();
// Algorithm can be SHA1CryptoServiceProvider for instance
byte[] data = HashAlgorithm.Create().ComputeHash(
username,
dateRequested,
validUntilDate,
// any other data you would like to validate
);
// todo: also check if licensing period is over here. ;-)
for (int l = 0; l < existingSerialKey.Length; ++l) {
if (existingSerialKey[i] != data[i]) {
if (allowExceptions){
throw new LicenseException(type, instance, "License is invalid");
}
return null;
}
}
// RuntimeLicense can be anything inheriting from License
return new RuntimeLicense();
}
この方法はカスタムを返します ライセンス, 、たとえば、ライセンスに関するプロパティを持っているもの、 日付時刻 ライセンスが終了する間。これをセットアップすることは長くはかからず、WinformsとASP.NETサイトの両方でうまく機能し、ライセンスを破る単純な試みを(保証なしで)阻止します。
他のヒント
私はこれで基準のようなものに出くわしたことはありません。私が個人的にやることは、ライセンスに関するすべてのinfomartionを保持するレコードまたはそのようなものを作成すること、およびプロダクトキーが入力される前に利用可能な機能、および裁判の期限や期限が切れるまで(これはあなたがしないように難しい場合があります'これはユーザーが変更できるため、システムの日付と比較したいのです。次に、このレコードを暗号化し(たぶん塩漬けしてハッシュすることで)、特定のプロダクトキーが入力されたときにのみ機能をロック解除できるようにします。また、当該キーをランダムに生成することもできますが、特定の形式でこれを行い、ユーザーが提供されたときに製品キーを常に認識し、請求書番号などと混同しないようにすることができます。
システムがないことを忘れないでください、そして、一部のOSの誰かが何らかの形で道を見つけるでしょう。これはおそらく、私が完全に安全な方法がないため、私が基準に出くわしたことがない理由です。あなたはそれで最善を尽くさなければなりません。