Tôi quan tâm để tìm hiểu xem có bất kỳ tiêu chuẩn hoặc tài nguyên nào mà bạn có thể đề xuất để phát triển các mô hình giấy phép trong C# không?Phát triển giấy phép trong C# - tôi bắt đầu từ đâu?
Trả lời
Trong C#, bạn có thể sử dụng Licensing class do Microsoft cung cấp. Một mẫu có sẵn thông qua liên kết.
Về cơ bản bạn tạo một lớp kế thừa từ LicenseProvider và gõ
[LicenseProvider(typeof(MyControlLicenseProvider))]
như một thuộc tính cho lớp của bạn mà bạn muốn đã được cấp phép. Trong thực hiện của bạn (MyControlLicenseProvider
), bạn có thể mã hóa các phương pháp thích hợp cho việc chứng thực giấy phép yêu cầu của bạn và sau đó có cuộc gọi mã của bạn
License license = LicenseManager.Validate(typeof(MyControl), this);
Nếu giấy phép không phải là NULL ứng dụng của bạn/kiểm soát được cấp phép.
Như Sir Graystar tuyên bố, không có hệ thống nào là chống lừa đảo và một người có kỹ năng cần thiết có thể tự thiết kế xung quanh việc xác thực của bạn. Đừng dành quá nhiều giờ để thực hiện một hệ thống cứng trên đá, nhưng đừng làm cho nó dễ dàng né tránh. :-)
Sử dụng hàm băm như SHA hoặc một trong các hàm băm MD và cho chúng một số dữ liệu chính có thể được sử dụng để tạo kiểm tra xác thực đơn giản. phương pháp xác nhận của bạn có thể làm điều gì đó trong những cầu thủ như
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();
}
Phương pháp này trả về một tùy chỉnh License, một trong những ví dụ có tính chất liên quan đến việc cấp giấy phép, giống như một DateTime cho thời điểm cấp phép chạy ra ngoài. Thiết lập này không nên mất nhiều thời gian, nó hoạt động tốt với cả hai WinForms và trên các trang ASP.NET, và sẽ ngăn chặn (không có bảo đảm ngụ ý) một nỗ lực đơn giản để phá vỡ cấp phép của bạn.
Cảm ơn bạn đã viết mã và tư vấn, tôi thực sự đánh giá cao nó. Tôi sẽ bắt đầu viết một mẫu thử nghiệm. –
Tôi chưa bao giờ bắt gặp bất cứ điều gì giống như một tiêu chuẩn trong điều này. Điều mà cá nhân tôi làm là tạo bản ghi hoặc thứ gì đó chứa tất cả thông tin về giấy phép và các tính năng có sẵn trước khi khóa sản phẩm được nhập và thời gian dùng thử hoặc hết hạn bao lâu (điều này có thể phức tạp như bạn không không muốn so sánh với ngày hệ thống vì điều này có thể được thay đổi bởi người dùng). Sau đó, bạn muốn mã hóa bản ghi này (có thể bằng cách ướp muối và băm), để các tính năng chỉ có thể được mở khóa khi một khóa sản phẩm cụ thể được nhập vào. Bạn cũng có thể muốn tạo ngẫu nhiên khóa đã nói, mặc dù tôi sẽ thực hiện điều này theo định dạng cụ thể để người dùng luôn có thể nhận ra khóa sản phẩm khi họ được cung cấp khóa và không nhầm lẫn điều này với số hóa đơn hoặc bất kỳ thứ gì.
Ghi nhớ rằng không có hệ thống nào là chống lừa đảo và một người nào đó trên một số hệ điều hành sẽ tìm cách vượt qua bằng cách nào đó. Đây có lẽ là lý do mà tôi không bao giờ đi qua bất kỳ tiêu chuẩn nào, bởi vì không có phương pháp nào hoàn toàn an toàn. Bạn chỉ cần làm tốt nhất của bạn với nó.
Xin chào, cảm ơn bạn đã trả lời. Bạn có biết liệu có tốt hơn khi làm việc với các khóa hoặc tệp giấy phép tùy chỉnh được thực hiện không? –
Tôi đã luôn luôn làm việc với các phím, nhưng nó có thể có giá trị xem xét các tập tin tùy chỉnh thực hiện là tốt. Không phải trong lĩnh vực kiến thức của tôi, tôi sợ. –
bản sao có thể có của [Làm cách nào tôi có thể tạo Khóa sản phẩm cho Ứng dụng C# của tôi] (http://stackoverflow.com/questions/453030/how-can-i-create-a-product-key-for-my- c-app) –
Bạn có thể cho chúng tôi mô tả kỹ lưỡng hơn về những gì bạn đang cố gắng đạt được không? –
Vâng, chắc chắn rồi. Tôi quan tâm đến việc phát triển nhiều mô hình giấy phép cho ứng dụng của mình. Ví dụ: 50 giấy phép người dùng, giấy phép người dùng không giới hạn, $ cho mỗi giấy phép đặt hàng, giấy phép dùng thử, v.v. –