c# .net security licensing license-key

Desarrollo de licencias en C#- ¿por dónde empiezo?



.net security (2)

En C # puede usar la clase de Licencia suministrada por Microsoft. Una muestra está disponible a través del enlace.

Básicamente, creas una clase que se hereda de LicenseProvider y escribes

[LicenseProvider(typeof(MyControlLicenseProvider))]

como un atributo para su clase que le gustaría tener licencia. En su implementación ( MyControlLicenseProvider ) puede codificar los métodos adecuados para validar la licencia de acuerdo con sus necesidades y luego solicitar su código.

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

Si la licencia no es nula, su aplicación / control tiene licencia.

Como afirma Sir Graystar, ningún sistema es infalible, y alguien con las habilidades necesarias podría diseñarse en torno a su validación. No gaste demasiadas horas implementando un sistema duro como una roca, pero tampoco haga que sea tan fácil de eludir. :-)

Usar un hash como SHA o una de las funciones de hash de MD y proporcionarles algunos datos clave podría usarse para crear una comprobación de validación simple. Su método de validación podría hacer algo como

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 License personalizada, una que, por ejemplo, tiene propiedades relacionadas con la licencia, como DateTime para el momento en que se agote la licencia. La configuración de esto no debería llevar mucho tiempo, funciona bien con WinForms y en los sitios ASP.NET, y frustrará (sin ninguna garantía implícita) un intento simple de romper su licencia.

¿Me interesa saber si existen estándares o recursos que pueda recomendar para desarrollar modelos de licencia en C #?


Nunca he encontrado nada como un estándar en esto. Lo que yo personalmente haría sería crear un registro o algo así que contenga toda la información sobre la licencia y qué funciones están disponibles antes de que se ingrese la clave del producto, y cuánto tiempo antes de que caduque la versión de prueba o lo que sea (esto puede ser complicado si no lo hace). No quiero comparar con la fecha del sistema, ya que el usuario puede cambiarla. A continuación, desea cifrar este registro (tal vez mediante su uso en sal y hash), de modo que las funciones solo se puedan desbloquear cuando se ingrese una clave de producto específica. También es posible que desee generar dicha clave de forma aleatoria, aunque yo haría esto en un formato específico para que el usuario siempre pueda reconocer una clave de producto cuando se le proporcione una, y no confunda esto con un número de factura o lo que sea.

Recuerde 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 hacer lo mejor que puedas con eso.