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?
Respuesta
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.
Gracias por el código y consejo, realmente lo aprecio. Comenzaré a escribir un prototipo. –
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.
Hola, gracias por la respuesta. ¿Sabes si es mejor trabajar con las claves o los archivos de licencia personalizados? –
Siempre he trabajado con claves, pero también vale la pena buscar en archivos personalizados. No en mi área de conocimiento, me temo. –
- 1. Programación de juegos en C, ¿dónde empiezo?
- 2. ¿Por dónde empiezo con rJava?
- 3. Aplicación web Clojure: ¿dónde empiezo?
- 4. ¿Por dónde empiezo con un bot web?
- 5. ¿Por dónde empiezo con Zend Framework?
- 6. ¿Por dónde empiezo con la informática distribuida?
- 7. Prevención de ataque de inyección SQL: dónde empiezo
- 8. ¿E-commerce de Django realmente básico? ¿Por dónde empiezo?
- 9. Ventajas y licencias de frameworks para desarrollo móvil (11.2011+)
- 10. ¿Por dónde empiezo con la Programación Orientada a Aspectos?
- 11. ASP.NET MVC y patrón de vista modelo-controlador: ¿por dónde empiezo?
- 12. ¿Dónde debería crear mi blog de desarrollo?
- 13. ¿Por dónde empiezo con la programación de VBA y macros en Word 2007?
- 14. ¿Cómo empiezo a aprender Assembly
- 15. Licencias (atribución)
- 16. ¿Por dónde empiezo a hacer un hack de entrada de Linux?
- 17. Licencias de aplicaciones web
- 18. Desarrollo de aplicaciones web para iPhone en ASP.NET: ¿por dónde empezar?
- 19. desarrollo de C++ en Mac
- 20. Desarrollo de C# en Linux
- 21. ¿Por dónde empiezo a aprender sobre el procesamiento de imágenes y el reconocimiento de objetos?
- 22. API de licencias de Java
- 23. dónde empezar con Chrome OS Desarrollo
- 24. ¿Por dónde empiezo a investigar mi proceso de Java que no terminará?
- 25. Biblioteca de administración de licencias
- 26. IKVM y licencias
- 27. ¿Por dónde empezar con el desarrollo de QuickBooks?
- 28. ¿Cómo empiezo a usar la programación multiproceso?
- 29. Objective-C en desarrollo web
- 30. ¿Cómo empiezo a leer en un desplazamiento en datos binarios?
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) –
¿Puede darnos una descripción más detallada de lo que está tratando de lograr? –
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. –