Also muss ich einen Code generieren, der an einen bestimmten Benutzer / Interessenten gekoppelt werden kann, in den ein Dollar-Betrag eingebaut ist. Es muss reversibel sein, damit die Client-Anwendung die Gültigkeit des Codes bestätigen und den vom Manager beabsichtigten Rabatt anwenden kann.
Ich möchte den Code so kurz wie möglich machen, aber er muss gut verschleiert sein, damit die Verkäufer nicht alleine damit herumspielen können.
Ich kann mir etwas einfallen lassen, das Zahlen umherspringt, durch Pi teilt und in Hex verwandelt und was auch immer, aber ich wäre wirklich an Ideen oder Best Practices aus der Community interessiert.
Ich mache das in C #, aber ich erwarte, dass Methoden aus jeder Sprache übersetzt werden können.
bearbeiten: um klarzustellen. Ich kann das Zeug nicht im Voraus speichern, die Codes müssen im Handumdrehen erstellt werden und alle Informationen mit sich tragen.
z. Verkäufer 14 ruft etwa Kunde 773 auf und möchte ihnen 500 $ von ihrer Bestellung geben. 14, 773 und 500 müssen im Gutscheincode enthalten sein und können in der Client-App extrahiert werden, nachdem der Verkäufer den Code eingegeben hat.
Generieren Sie ein öffentliches / privates Schlüsselpaar zum Signieren. Signieren Sie die Kombination aus Benutzer-ID und Gutscheinwert mit dem privaten Schlüssel digital. Veröffentlichen Sie den Couponwert + Unterschrift als Couponcode, codiert zum Beispiel mit Buchstaben und Zahlen. Die Client-Anwendung würde den Code verifizieren, indem sie die Kombination der ursprünglich signierten Daten erneut erstellt (z. B. die Benutzer-ID dem Gutscheinwert voranstellt) und dann die digitale Signatur überprüft.
Klingt wie ein Fall für asymetrische Verschlüsselung. Sie könnten den öffentlichen Schlüssel an alle weitergeben und ihnen somit die Informationen für die Validierung des Gutscheins zur Verfügung stellen, aber die Möglichkeit, einen Cupon zu erstellen, würde beim Besitzer des privaten Schlüssels (= Ihnen) liegen.
Ich würde eine Coupon-Klasse erstellen, die zu xml serialisiert und dann die XML-Zeichenfolge verschlüsselt. Die Validierung würde darin bestehen, die Zeichenfolge zu entschlüsseln und festzustellen, ob es sich um ein gültiges xml-Objekt handelt (ich empfehle, das Objekt nicht zu deserialisieren, ohne dies vorher zu überprüfen).
Ich würde den Kundencode und das Ablaufdatum des Gutscheins verwenden. Zur Verifizierung können Sie nur gültige Gutscheine in Ihrer Datenbank speichern und verifizieren. Sie können die Coupontabelle einmal pro Tag scannen, um abgelaufene Codes zu löschen.
Ich schätze, dass Sie die Frage formuliert haben, dass Sie die Codes nicht in einer Datenbank speichern wollen (wenn Sie das täten, könnten Sie einfach jeden Code gegen die Datenbank verifizieren)
Also, was Sie tun könnten, ist, alle relevanten Informationen über das, was in dem Coupon ist, zu nehmen und dann zusammen mit einem geheimen Salz zu hacken, um Manipulationen zu verhindern.
Nehmen wir an, Sie wollten einen Gutschein für den Benutzer 23 im Wert von $ 200, Sie könnten einen String wie "23_200" erstellen und einen MD5-Hash mit einem geheimen Salz von "BillTheLizard" berechnen, um 2671519131e974ee6fc746151e98f4a8, also den vollständigen Code zu erhalten der Kunde ist 200_23_2671519131e974ee6fc746151e98f4a8
Nun, als Sie den Code erhalten haben, brechen Sie ihn auseinander und überprüfen Sie, ob md5 ("200_23" + secret) = 2671519131e974ee6fc746151e98f4a8 den Wert
überprüftEdit: Wenn ein Hash mit 32 Zeichen zu lang ist, können Sie ihn immer abschneiden, z. Wenn Sie es auf 8 Zeichen zerlegen, erhalten Sie immer noch 4294967296 verschiedene Hashwerte.
Dies ist nur die Zusammenfassung der Antworten bisher. Es gibt zwei verschiedene Möglichkeiten, solche Gutscheincodes zu generieren:
Zentralisierte Lösung: Die Informationen zu jedem Gutschein werden in Ihrer Datenbank gespeichert. Der Gutscheincode kann dann nach dem Zufallsprinzip generiert und kurz sein - es ist nur ein Verweis auf einen Datensatz in Ihrer Datenbank, der alle notwendigen Informationen enthält, z. B. Gutscheinwert, Kunden-ID, Rep-ID. Die Überprüfung eines solchen Codes erfordert Online-Zugriff auf Ihre Server.
Dezentrale Lösung: Der Coupon ist eine eigenständige Information, die im Offline-Modus verifiziert werden kann, ohne auf einen Ihrer Server zuzugreifen. Folglich muss der Gutscheincode einige (oder sogar alle) Informationen enthalten. Der sicherste Weg ist die Verwendung asymmetrischer Kryptographie oder eines Message Authentication Code , so dass nur der Inhaber des privaten Schlüssels ( Sie können Coupons generieren.
Tags und Links language-agnostic c# encoding cryptography