2008-10-13 15 views
7

Por lo tanto, necesito generar un código que pueda vincularse a un usuario/prospecto específico con una cantidad en dólares incorporada en él. Tiene que ser reversible para que la aplicación del cliente pueda confirmar la validez del código y aplicar el descuento que pretende un administrador.Generar código de cupón de tiempo específico de usuario 1

Me gustaría hacer que el código sea lo más corto posible, pero tiene que estar bien oculto para que los vendedores no puedan empezar a jugarlo por su cuenta.

Puedo pensar en algo, rebotando números, dividiendo por pi y convirtiendo a hexadecimal y otras cosas, pero estaría realmente interesado en ideas o mejores prácticas de la comunidad.

Estoy haciendo esto en C# pero espero que se puedan traducir los métodos de cualquier idioma.

editar: para aclarar. No puedo almacenar esto antes de tiempo, los códigos deben construirse sobre la marcha y llevar toda la información con ellos.

por ejemplo. El vendedor 14 llama sobre el cliente 773 y quiere darles $ 500 de descuento en su orden. 14, 773 y 500 deben estar en el código de cupón y poder extraerse en la aplicación del cliente después de las claves del vendedor en el código.

+0

Podría aclarar el protocolo aquí? Parece que tiene varias fiestas, un vendedor S, un cliente (¿cliente?) C, una base de datos central D y una aplicación cliente A. ¿Quién habla con quién y en qué orden, y qué parte le dice a qué otra parte qué ? Es difícil responder a tu pregunta sin esto. –

Respuesta

7

Genera un par de claves públicas/privadas para la firma. Firme digitalmente la combinación de ID de usuario y valor de cupón usando la clave privada. Publique el valor de cupón + firma como el código de cupón, codificado, por ejemplo, con letras y números. La aplicación cliente verificaría el código recreando la combinación de datos que se firmó originalmente (por ejemplo, anteponiendo la ID del usuario al valor del cupón) y luego verificando la firma digital.

+0

Nota: aún tendrá que tener un informe de los puntos de venta con los cupones que se han usado con bastante frecuencia para minimizar el riesgo de que un cupón se use dos veces. – Neall

+0

Claro, asegurarse de que un código de cupón se use solo una vez se deja como un ejercicio para el lector. Además, los datos firmados deben incluir más información, de modo que sea posible emitir varios cupones por el mismo valor y por la misma combinación de cliente + representante de ventas. – Alexander

+0

Para obtener más información, http://en.wikipedia.org/wiki/Public-key_cryptography y una búsqueda en Google son útiles. – ICR

2

Usaría el código de cliente y la fecha de vencimiento del cupón. En cuanto a la verificación, puede almacenar cupones válidos en su base de datos y verificarlos. Puede escanear la tabla de cupones una vez al día para purgar códigos caducados.

+0

Hay países (como Suiza) donde los cupones de la ley nunca caducan (a pesar de que generalmente tienen una fecha de vencimiento impresa en el cupón). Reemplace la fecha de vencimiento por fecha de emisión a continuación. –

+0

Me gusta esta respuesta porque ofrece una buena alternativa a todas las otras respuestas que dependen de la criptografía. Lo único que debe tener en cuenta acerca de esta solución es que no puede verificar los códigos de cupón en el modo fuera de línea. – Alexander

+0

Una solución ligeramente más limpia que conduce a códigos de cupón más cortos es generar ID de cupones cortos completamente aleatorios (por ejemplo, 8 dígitos alfanuméricos), almacenarlos en la base de datos junto con toda la información relevante sobre el cupón, como ID de cliente, ID de representante , valor de cupón, vencimiento ... – Alexander

2

¿Cuán ingeniosos son sus vendedores (o mujeres)? ¿Podrías basar 64 codificar el valor?

Marque aquí para saber cómo codificar y decodificar Base64:

http://arcanecode.wordpress.com/2007/03/21/encoding-strings-to-base64-in-c/

Aparte de eso, sería cifrar el valor con una clave conocida por usted y por la aplicación cliente.

+0

Son sorprendentemente ingeniosos a veces. especialmente cuando su comisión está montada en él. – Echostorm

+0

Entonces la encriptación es el camino a seguir, la sugerencia de Treb funcionará. – Arry

5

Suena como un caso de encriptación asimétrica. Podría dar la clave pública a todos, brindándoles la información para validar el cupón, pero la capacidad de crear un cupón recaería en el propietario de la clave privada (= usted).

Crearía una clase de cupón que serializa a xml, y luego encriptaría la cadena xml. La validación sería descifrar la cadena y ver si es válida xml (recomiendo no deserializar el objeto sin verificar esto antes).

1

supongo de manera que haya formul la pregunta que no desea almacenar los códigos en una base de datos (si lo hizo, simplemente podría verificar cada código de la base de datos)

lo tanto, lo lo que podría hacer es tomar toda la información pertinente sobre lo que está en el cupón, luego mezclarla con una sal secreta para evitar su manipulación.

Por lo tanto, supongamos que quiere un cupón para el usuario 23 por valor de $ 200, puede construir una cadena como "23_200" y calcular un hash MD5 con una sal secreta de "BillTheLizard" para obtener 2671519131e974ee6fc746151e98f4a8, así el código completo dar al cliente es 200_23_2671519131e974ee6fc746151e98f4a8

Ahora, cuando se recibe el código, lo rompe a pedazos, y comprobar que MD5 ("200_23" + secreto) = 2671519131e974ee6fc746151e98f4a8 para verificar el valor

Editar: Si un hash de 32 caracteres es demasiado largo, siempre se puede truncar, por ejemplo reducirlo a 8 caracteres aún le daría 4294967296 valores hash diferentes.

+0

En mi experiencia, las personas (de ventas) harán todo lo posible por manipular ese sistema para obtener beneficios personales. Por ejemplo, contratarán a alguien para averiguar la sal secreta de la aplicación del cliente. La criptografía asimétrica es un poco más confiable en este escenario. – Alexander

+0

MD5 es vulnerable a ataques de extensión de mensaje: hay formas en que el vendedor puede modificar los datos del cupón de una manera que no cambie el hash resultante para que pueda tomar un cupón y generar otros similares que todavía son válidos. La manera segura de hacer lo que sugiere es utilizar una técnica existente [Código de autenticación de mensajes] (https://en.wikipedia.org/wiki/Message_authentication_code) en lugar de crear la suya propia. Una posibilidad que está ampliamente disponible es [HMAC] (https://en.wikipedia.org/wiki/HMAC). – hugomg

1

Esto es solo para resumir las respuestas hasta el momento. Hay dos principales formas distintas de la generación de tales bonos de descuento:

  1. solución centralizada: la información sobre cada cupón se almacena en su base de datos. El código de cupón se puede generar de forma aleatoria y breve, es solo una referencia a un registro en su base de datos que contiene toda la información necesaria, como valor de cupón, ID de cliente, ID de representante. La verificación de dicho código requiere acceso en línea a sus servidores.

  2. Solución descentralizada: el cupón es una información independiente que se puede verificar en modo fuera de línea, sin tener que acceder a ninguno de sus servidores. Como resultado, el código de cupón debe contener parte (o incluso toda) de la información. La forma más segura es usar una criptografía asimétrica o un Message Authentication Code para que nadie más que el titular de la clave privada (usted) pueda generar cupones.

1

Steve Gibson habla de uno contraseñas tiempo en su sitio web, pero no hay razón para que no podría utilizarlo para crear bonos de descuento Una vez: http://grc.com/ppp

Cuestiones relacionadas