algorithm - promocodes - Por curiosidad: ¿Cómo se generan los números de serie? Sugerencias, Algoritmos?
strong key generator (7)
Bueno, tradicionalmente los números de serie son números seriales. Entonces, el primer ejemplo de la línea de producción es sn 0001, luego el siguiente es 0002 y el siguiente es 0003. Creo que la mayoría de la gente puede resolver ese algoritmo.
Creo que en realidad está preguntando por las claves de producto, que usan un mecanismo similar a la firma de mensajes de clave pública: la clave del producto es el valor encriptado, el programa tiene una clave pública que le permite verificar que la clave sea válida, pero solo el el proveedor de software tiene la clave secreta para ''firmar'' la clave del producto. El artículo de wikipedia sobre firmas digitales tiene el mecanismo general; la única condición es que para que el usuario ingrese una clave tiene que ser bastante más corta que una PGP.
Si está restringido a un número de serie muy corto, entonces es poco probable que sea lo suficientemente grande como para almacenar el resultado de un mecanismo de firma típico, en cuyo caso es bastante común usar alguna variante de suma de comprobación en él. Eso tiene la desventaja de ser fácil de aplicar ingeniería inversa: su seguridad se debe a que el algoritmo es ''secreto'' en lugar de a las propiedades criptográficas. Cada producto tendría su propio algoritmo, y generalmente se rajan bastante rápido.
Si tiene 5 bloques de 5 caracteres, tiene 36 ^ 25 combinaciones, que es más grande que 2 ^ 128, por lo que podría usar uno de los algoritmos estándar de firma digital que genera 128 bits, luego convierta ese valor a base 36.
Me pregunto cómo funcionan los generadores de números de serie y el validador. Mi objetivo sería generar un número de serie con cinco partes que constan solo de números y letras.
Disfruto de la codificación como un pasatiempo y no me llamaría programador profesional. Sin embargo, estoy muy interesado en cómo esas funciones interesantes funcionan técnicamente para ampliar mi mente.
Cualquier sugerencia, experiencia o algoritmo escrito son apreciados.
Mucha información aquí:
Obtenga un par de claves públicas / privadas . Genere números de secuencia (10000, 20000, 30000, 40000, ....) que tengan alguna característica de identificación (por ejemplo, divisible por 10000). Encripta ese número usando tu clave privada. Codifique ese valor usando algún sistema legible por humanos ( base 32 o 64 ) y separe los valores en grupos para que sea más fácil de analizar. Distribuya el número de serie codificado con cada venta de su aplicación.
En algún lugar de la aplicación, tienes la clave pública oculta. Cuando un usuario ingresa un número de serie codificado, primero decodifícalo de nuevo en binario. Usa la clave pública para descifrarlo. Verifica que sea divisible por 10000.
La parte más difícil está en la implementación: ocultar la clave pública en la aplicación para que no pueda ser reemplazada fácilmente. Elegir una secuencia que pueda identificar fácilmente, pero que no se quede sin valores. Obfuscating la aplicación para que alguien no pueda pasar fácilmente el cheque completo. etc ...
Puede usar un generador de números aleatorios y almacenar las salidas en una base de datos. En caso de solicitud de activación, simplemente verifique si el número de serie está en la base de datos y marque el número de serie como "usado".
Por supuesto, esto necesita una conexión a Internet, pero es bueno contra el método "comprar una vez, usar muchas, muchas veces" y en caso de llamada de soporte, puede reactivar esa serie para otra reinstalación.
Edición posterior: también debe usar para la verificación de Internet una conexión encriptada y autenticada, como una HTTPS.
Un GUID ("Identificador Globalmente Único") podría ser una manera fácil de resolver esto:
http://en.wikipedia.org/wiki/Globally_Unique_Identifier
Las guías contienen 16 bytes y se escriben más comúnmente en texto como una secuencia de dígitos hexadecimales como:
3F2504E0-4F89-11D3-9A0C-0305E82C3301
Y la mayoría de los lenguajes de programación deberían poder generar un GUID con una de las bibliotecas disponibles.
Usando mi Google-Foo, se me ocurrió este artículo:
http://www.mactech.com/articles/mactech/Vol.13/13.02/SerialNumberGenerator/index.html
Brandon Staggs escribió un buen artículo sobre Implementación de un sistema de verificación parcial de número de serie . Los ejemplos están escritos en Delphi, pero podrían convertirse a otros idiomas.