22

C#でライセンスモデルを開発するために推奨できる標準やリソースがあるかどうかを知りたいのですが。

4

2 に答える 2

25

C#では、Microsoftが提供するLicensingクラスを使用できます。サンプルはリンクから入手できます。

基本的に、LicenseProviderから継承するクラスを作成し、次のように入力します。

[LicenseProvider(typeof(MyControlLicenseProvider))]

ライセンスを取得したいクラスの属性として。実装では(MyControlLicenseProvider)、必要に応じてライセンスを検証するための適切なメソッドをコーディングしてから、コードを呼び出すことができます

License license = LicenseManager.Validate(typeof(MyControl), this);

ライセンスがnullでない場合、アプリケーション/コントロールにライセンスが付与されます。

グレイスター卿が述べているように、絶対確実なシステムはなく、必要なスキルを持った誰かがあなたの検証を自分で設計することができます。ロックハードシステムの実装に多くの時間を費やさないでください。ただし、簡単に回避できるようにしないでください。:-)

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();
}

このメソッドは、カスタムライセンスを返します。たとえば、ライセンスがなくなるときのDateTimeなど、ライセンスに関するプロパティがあります。これを設定するのにそれほど時間はかからないはずです。WinFormsとASP.NETサイトの両方でうまく機能し、ライセンスを破る単純な試みを阻止します(保証はありません)。

于 2010-05-25T10:47:28.490 に答える
2

私はこれで標準のようなものに出くわしたことがありません。私が個人的に行うことは、ライセンスに関するすべての情報、プロダクトキーが入力される前に利用できる機能、試用期間などの有効期限が切れるまでの期間を保持するレコードなどを作成することです(これは難しい場合があります)これはユーザーが変更できるため、システムの日付と比較したくない)。次に、このレコードを暗号化して(おそらく、ソルトとハッシュによって)、特定のプロダクトキーが入力されたときにのみ機能のロックを解除できるようにします。また、上記のキーをランダムに生成することもできますが、これは特定の形式で行うため、ユーザーはプロダクトキーを受け取ったときに常に認識でき、請求書番号などと混同しないでください。

誰にでもできるシステムはないことを忘れないでください。一部のOSの誰かが、なんとかして道を見つけるでしょう。これはおそらく、完全に安全な方法がないため、私が標準に出くわしたことがない理由です。あなたはそれで最善を尽くす必要があります。

于 2010-05-25T08:30:43.530 に答える