2010-05-24 26 views
15

Me interesa saber si existen estándares o recursos que pueda recomendar para desarrollar modelos de licencia en C#?Desarrollo de licencias en C#: ¿dónde empiezo?

+2

posible duplicado de [¿Cómo puedo crear una clave de producto para mi aplicación C#] (http://stackoverflow.com/questions/453030/how-can-i-create-a-product-key-for-my- c-app) –

+0

¿Puede darnos una descripción más detallada de lo que está tratando de lograr? –

+0

Sí, claro. Estoy interesado en desarrollar múltiples modelos de licencia para mi aplicación. Ejemplos: 50 licencia de usuario, licencia de usuario ilimitada, $ por licencia de orden, licencia de prueba, etc. –

Respuesta

16

En C# puede usar el Licensing class suministrado por Microsoft. Una muestra está disponible a través del enlace.

Básicamente se crea una clase que hereda de LicenseProvider y escriba el

[LicenseProvider(typeof(MyControlLicenseProvider))] 

como un atributo de la clase que le gustaría haber autorizado. En su aplicación (MyControlLicenseProvider) puede codificar los métodos apropiados para la validación de la licencia a sus necesidades y luego tener su llamada código

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

Si la licencia no es nulo su aplicación/de control tiene licencia.

Como afirma Sir Graystar, ningún sistema es infalible, y alguien con las habilidades necesarias podría encargarse de su validación. No dedique demasiadas horas a implementar un sistema de rocas duras, pero tampoco evite eludirlo fácilmente. :-)

Usando un hash como SHA o una de las funciones MD hash y aliméntelos algunos datos clave podrían usarse para crear una verificación de validación simple. Su método de validación podría hacer algo en los gustos de

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

Este método devuelve una costumbre License, que por ejemplo tiene propiedades en cuanto a la concesión de licencias, como un DateTime para el momento en que se agote la concesión de licencias. Configurarlo no debería llevar mucho tiempo, funciona bien con WinForms y en sitios ASP.NET, y frustrará (sin ninguna garantía implícita) un simple intento de romper su licencia.

+1

Gracias por el código y consejo, realmente lo aprecio. Comenzaré a escribir un prototipo. –

1

Nunca me he encontrado algo así como un estándar en esto. Lo que yo personalmente haría es crear un registro o algo así que contenga toda la información sobre la licencia y qué características están disponibles antes de ingresar la clave del producto, y cuánto tiempo antes de la prueba o lo que vence (esto puede ser complicado ya que no no quiero comparar con la fecha del sistema, ya que el usuario puede modificarla). Luego, desea encriptar este registro (tal vez salando y mezclando), de modo que las funciones solo puedan desbloquearse cuando se ingresa una clave de producto específica. También es posible que desee generar aleatoriamente dicha clave, aunque lo haría en un formato específico para que el usuario siempre pueda reconocer una clave de producto cuando se le dé una, y no la confunda con un número de factura o lo que sea.

Recuerda que ningún sistema es infalible, y alguien en algún sistema operativo encontrará la manera de hacerlo de alguna manera. Esta es probablemente la razón por la que nunca he encontrado ningún estándar, porque ningún método es completamente seguro. Solo tienes que dar lo mejor con eso.

+0

Hola, gracias por la respuesta. ¿Sabes si es mejor trabajar con las claves o los archivos de licencia personalizados? –

+0

Siempre he trabajado con claves, pero también vale la pena buscar en archivos personalizados. No en mi área de conocimiento, me temo. –

Cuestiones relacionadas