Solo puedo hablar sobre cómo hice mis proyectos, pero básicamente es un montón de matemáticas discretas y algo de criptografía ligera.
En general, necesita lo siguiente para tener un generador de claves de licencia decente:
- Algunos ID de secuencia incorporados para garantizar que no haya duplicados (un campo de identidad de la base de datos como el AUTO_INCREMENTO de MySQL funciona bien).
- Un conjunto de caracteres limitado para evitar errores de entrada humana. Utilice, por ejemplo, base-22 como “0123456789ACEHKMPTUWXY” De esta manera, cero, Oh, mayúscula Q todos se asignan al mismo punto de código y no importa si el usuario lo confunde.
- Introduzca un par de dígitos de verificación (nuevamente, para evitar errores de entrada de datos y estafas). Lea el dígito de verificación para ver varios métodos para hacerlo.
- Vale la pena codificar una pequeña ID de tipo de código dentro (como esta es la versión 1/2/3 / lo que sea) en el formato.
- Reserve algunos puntos de código para futuras expansiones.
- También podría usar un algoritmo hash si solo desea verificar la validez del código y no le importa lo que hay dentro.
El último proyecto que hice fue de 20 caracteres, incrustado un dígito de control, estaba en una base un poco más grande (utilicé una base 26 que es un poco más propensa a errores que la base 22 que mencioné anteriormente). También incrustó una pequeña palabra dentro para identificar el tipo de código que era.
- ¿Cuál es el estado actual de la computación analógica?
- ¿Se puede enseñar el pensamiento matemático / lógico?
- ¿Qué nivel de matemáticas necesito tener si quiero convertirme en un buen programador gráfico?
- ¿Cuáles son algunas de las aplicaciones comunes de Machine Learning?
- ¿Cómo escribiría una función que encuentre la entrada máxima n tal que f (n) <c en el tiempo O (lg n)?
Ponte súper cómodo con la conversión de personajes a / desde grandes números. Básicamente, lo que está haciendo es convertir un número (en una base alfa az [base26 simple], “foobar” es 66051301
en base 10 y luego “ETY3HW” en mi base22 modificada arriba). Las bibliotecas Bigint (como GMP) son su amigo aquí.
Por último, si necesita hacer códigos de tipo desafío-respuesta (como la activación fuera de línea para Windows), también deberá sentirse cómodo con los conceptos criptográficos como firmar una solicitud y aceptar una respuesta remota (nuevamente, haciendo toda la incrustación en, por ejemplo, base22 o similar). Esto es, por cierto, por qué la activación sin conexión de Windows tiene tantos dígitos más en sus códigos; necesita incrustar datos no triviales dentro de la solicitud y no solo un número de serie simple.
Una gran cantidad de software utilizará solo un certificado SSL (generalmente formato PEM + X.509) firmado por algún firmante de confianza. Macrovision tiene una licencia de registro / salida basada en archivos de licencia, y estoy seguro de que hay alguna biblioteca OSS que genera claves muy bien. ¡Buena suerte!