Aktivierungscode Berechnen

  • Hi.


    Ich will für einen Registriervorgang einen Aktivierungscode berechnen. Das soll dann so ablaufen: jemand meldet sich an und kriegt ne Mail mit diesem Code. Danach muss er auf einer Seite seinen Benutzernamen und den Code eingeben, und der Benutzer wird im System angelegt.


    Vom technischen her ist alles kein Problem, nur überlege ich schon die ganze Zeit, wie ich so einen Code sinnvoll generiere. Einfach eine Zufallszahl erscheint mir zu billig ;)


    Vielleicht hat ja jemand einen bewährten Algorythmus, oder sonst eine Idee. Im Netz finde ich dazu leider nichts, vermutlich benutzte ich die falschen Suchbegriffe.


    Dank und Gruß


    The-spY

    I am the lizard king - I can do anything!

  • Vielleicht die Quersumme aus einem Timestamp, und dann noch ein wenig mit einer Zufallszahl herumspielen. Oder ist das auch noch zu simpel? ;)


    -Ecko

    "Think globally, act locally."
    "Ein Mann ein Wort, eine Frau ein Wörterbuch" -Boris Becker
    "Ein kluger Mann widerspricht keiner Frau. Er wartet bis Sie es selbst tut."
    "There's no replacement for displacement"

  • Weitere mögliche "Zufallszahlen:"

    • Größe oder freier Speicherplatz der C-Partition
    • Erstellungsdatum des Win-Verzeichnisses
    • Gesamtspielzeit einer Audio-CD
    • Windows-Anmeldename in Hex-Codes oder andere


    Und dann eine Formel drumrumbasteln.
    Sollte nicht sooo schwierig sein.



    Bess dehmnäx,
    Carsten

    "Das Problem an Zitaten aus dem Internet ist, daß sie nur schwer überprüfbar sind."


    Konrad Adenauer

  • das letzte was man bei so einem code möchte ist gesetzmässigkeit. demnach ist alles andere als eine zufallszahl unbrauchbar.

    !ND - E71

  • Zitat

    Original geschrieben von !ND
    das letzte was man bei so einem code möchte ist gesetzmässigkeit. demnach ist alles andere als eine zufallszahl unbrauchbar.

    Das ist genau der Punkt. Ich glaube ich werds mal mit der Zufallszahl und nem Timestamp probieren. Ich hab eh noch den Benutzernamen drin bei der Aktivierung, und der ist eindeutig im System. Von daher sollte es sogar egal sein, wenn 2 Leute den gleichen Code haben, falls das mal vorkommen sollte.


    cia The-spY

    I am the lizard king - I can do anything!

  • Zitat

    Original geschrieben von The-spY
    Von daher sollte es sogar egal sein, wenn 2 Leute den gleichen Code haben, falls das mal vorkommen sollte.


    Das dürfte so gut wie nie vorkommen, wenn der Code lang genug ist. Wenn du z.B. einen 8 Zeichen langen Code generierst, der aus Gross-, Kleinbuchstaben & Zahlen besteht, dann gibt es immerhin 62^8 Möglichkeiten.


    & simpel zu programmieren ist das auch noch!


    Ciao,


    Hanse

  • Hallo,
    was haltet ihr davon wenn er aus dem Timestamp den MD5 Hash bildet? Der ist 32 stellig :)
    Gruss
    Börni

  • Den Timestamp zu verwenden hat Nachteilen; es wird bestimmt vorkommen, das der einer oder ander Benutzer den Code verliert/vergisst, und dann musst Du alle Benutzernamen und Registrierungscodes (oder die verwendeten Timestamps) irgendwo in einem Datenbank haben, um den User seinen Code wieder zuzuschicken. Und Falls dein Datenbank kaputt geht, hast Du echte Probleme (es sei dann, es waere in Ordnung dem User einen neuen, anderen Code mitzuteilen - ist Anwendungsabhaengig, ob so was akzeptabel ist).


    Aber der Vorschlag von Boerni, einen Hash aus einem bekannten Crypto-Algorithmus zu verwenden ist auch nicht schlecht. Wenn der Benutzername schon eindeutig ist, wuerde ich diesen mit einer geheimen Zeichenkette kombinierien, den Hash bilden, und den als ASCII-Hex den User zuschicken.


    Der grosse Vorteil, IMHO, ist das man immer in der Lage ist, den gleichen Registrierungscode einfach vom Usernamen neu zu bilden, ohne alle Codes in einer Datenbank zu speichern (was auch unter Umstaenden unsicher waere), da der geheime String immer das selbe bleibt. Um den Code fuer einen Benutzernamen zu prufen, braucht man auch nicht in einem DB stoebern, Du benutzt eben das selbe Algorithmus (server-side) beim Seiten-Login.


    Der Nachteil ist das die geheime Zeichenkette wirklich geheim bleiben muss, auch das Program zum Codeberechnen.


    Wie klingt das? Ich habe so was schon selber verwendet (allerdings nur fuer relativ unwichtige Sachen), und kann einen C++ Beispiel for Windows posten, wenn's weiter hilft.


    MfG,
    Mark

  • Zitat

    Original geschrieben von engMark
    Den Timestamp zu verwenden hat Nachteilen; es wird bestimmt vorkommen, das der einer oder ander Benutzer den Code verliert/vergisst, und dann musst Du alle Benutzernamen und Registrierungscodes (oder die verwendeten Timestamps) irgendwo in einem Datenbank haben, um den User seinen Code wieder zuzuschicken. Und Falls dein Datenbank kaputt geht, hast Du echte Probleme (es sei dann, es waere in Ordnung dem User einen neuen, anderen Code mitzuteilen - ist Anwendungsabhaengig, ob so was akzeptabel ist).


    Hab mal gegrübelt, aber mir fiel kein Anwendungsfall ein, wo es ein Problem sein könnte die Aktivierungscodes in der DB zu speichern und bei Bedarf erneut zuzusenden oder auch einfach einen neuen Schlüssel zu generieren. Ist IMHO die sicherste Methode.
    Aber jeder so wie er möchte natürlich. ;)

  • Es ist nicht gerade problematisch, die Codes in einer DB zu speichern. Ich wollte nur darauf hindeuten, dass bei Verwendung eines Timestamps es ohne eine DB nicht moeglich waere, einem User spaeter den originalen Code mitzuteilen. Vielleicht ist das in diesem Fall auch unwichtig, aber vielleicht hat The-spY den Bedarf, einen betimmten User immer den gleichen Code zu geben - kann ich nicht wissen.


    Aber falls man sich fuer einen DB entscheidet, braucht man auch beim Systementwurf fuer die Moeglichkeit der Datenverlusts zu plannen - und weil das mehr Aufwand bedeutet, und vielleicht mehr Kosten verursacht, usw., wollte ich eine einfache Moeglichkeit vorschlagen, die auch ohne DB die Wiederherstellung des originalen Codes erlaubt, falls das notwendig waere.


    Zitat

    Aber jeder so wie er möchte natürlich.

    Genau - es gibt keine beste Loesung, immer nur eine passende :D


    Mark

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!