Zufallszahlen / Passwörter erzeugen
Kevin T.
- programmiertechnik
Hallo liebes Forum,
ich benötige als Kundenpasswörter ca. 6.000 EINDEUTIGE Zahlen/Buchstabenreihen in der Form
AAA - BBB - CCC
AAA - Ziffern von 0 bis 1
BBB - Buchstaben von A bis Z
CCC - gemischt (Ziffern und Buchstaben)
Mein Gehirn läuft heute Morgen auf Sparflamme, deshalb bin ich für Tipps und Denkansätze sehr dankbar. Braucht kein fertiges Script zu sein.
Viele liebe Grüße
Kevin
hi
AAA - Ziffern von 0 bis 1
(ich geh jetzt mal von 0-9 aus, ist doch richtig? :))
du suchst also ein dreistellige zahl zwischen 0 und 999, wenn die zahl kleiner 100 ist kommt 1 null, wenn sie kleiner 10 ist kommen 2 davor.
BBB - Buchstaben von A bis Z
du möchtest also zufällig einen von 26 buchstaben auf jeder position haben
CCC - gemischt (Ziffern und Buchstaben)
hier benötigst du also zufällig 26 buchstaben plus die 10 ziffern
so long
ole
(8-)>
(ich geh jetzt mal von 0-9 aus, ist doch richtig? :))
ja :-)
aber was mich vor allem interessiert, ist diese Vorgehensweise richtig bei 6.000 Zahlen:
1. Zufallsstellen erzeugen
2 .Zufallszahl in der DB nachschlagen, ob schon vorhanden
3. Zufallszahl in die DB schreiben
Grüße
Kevin
hi
aber was mich vor allem interessiert, ist diese Vorgehensweise richtig bei 6.000 Zahlen:
warum sollte sie nicht? ist doch recht fix gemacht.
du erzeugst pro passwort 7 zufallszahlen
und ordnest 6 indizes den entsprechenden wert zu
und fragst (im optimal fall) 5999 die datenbank ab.
dürfte nicht die größte last für deinen rechner/db werden.
so long
ole
(8-)>
Hello,
(ich geh jetzt mal von 0-9 aus, ist doch richtig? :))
ja :-)
aber was mich vor allem interessiert, ist diese Vorgehensweise richtig bei 6.000 Zahlen:
- Zufallsstellen erzeugen
2 .Zufallszahl in der DB nachschlagen, ob schon vorhanden- Zufallszahl in die DB schreiben
Das kann man alles in einem Aufwasch machen.
insert into tabelle1 (zufall) values(rand()*10000000000);
Das würde eine zehnstellige Zufallszahl in die Spalte zufall einfügen.
Wenn die Spalte zufall z.B. vom Typ Decimal (10,0) ist, wird der Nachkommawert
automatisch abgeschnitten, und wenn die Spalte einen Unique Index hat, kann man
jede Zahl auch nur einmal eintragen.
Das wiederholt man dann in der API (z.B. PHP, PERL, BASIC-Dialekte, C-Programm, ...) solange, bis die angeforderte Anzahl Datensätze erreicht ist. Abbruchbedingung für Hänger auch hier bitte
nicht vergessen.
Das Statement wird von den meisten SQL-Datenbanken so, oder zumindest so ähnlich, unterstützt.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
1. Schritt
Charactger-Set festlegen
2. Schritt
Länge des Passwortes festlegen oder auswürfeln
3. Schritt
Schleife sooft bis Länge des Passworte erreicht -->
Index auswürfeln innerhalb der Länge des Charactersets
Mit dem Index auf das Characterset zugreifen und den Character an das Passwort anhängen
<--
4. Schritt
Prüfen, ob dieses Passwort schon in der Liste steht (Datei, Monsterarray)
5. Schritt
Wenn nicht drinsteh, hinzufügen
Wenn drinsteht, nochmal von vorne. Sinnvollerweise eine Kontrollzähler mitlaufen lassen,
der bei Überschreitung einer gewissen Anzahl von Wiederholungsversuchen mit Fehlermeldung
abbricht. Nicht, dass es ein Endlosprogramm wird ;-)
Viel Erfolg
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
der bereich von 000 AAA 000 bis 111 ZZZ ZZZ ist mehr als ausreichend für 6000 kombinationen. (2^3 * 26^3 * 36^3)
es kann linear vorgegangen werden (beispiel mit lücken).
schleife i von 0 bis 5999 (oder zb. 1 bis 24000 step 4)
* 1. Block generieren
1.stelle: = (string) i mod 2
2.stelle: = (string) i mod 2^2
3.stelle: = (string) i mod 2^3
* 2. Block generieren
1.stelle: = chr( i mod 26 + dec('A') )
2.stelle: = chr( i mod 26^2 + dec('A') )
3.stelle: = chr( i mod 26^3 + dec('A') )
* 3. Block generieren
1.stelle: = chr( i mod 36 + dec('0') )
2.stelle: = chr( i mod 36^2 + dec('0') )
3.stelle: = chr( i mod 36^3 + dec('0') )
Eine gute Idee, aber würde die Linearität nicht dazu führen, dass Passwörter errechnet werden können?
Gruß
Kevin
Eine gute Idee, aber würde die Linearität nicht dazu führen, dass Passwörter errechnet werden können?
du hast einen bereich von kombinationen. jedes passwort befindet sich in einem bereich von kombinationen. welcher nun besetzt ist, spielt ja keine rolle. es sei denn, man probiert alle kombinationen aus. so machen das ja manche hacker.
allerdings reicht das passwort ja nicht allein. es gehört ja noch eine zweite information dazu. nun wird der bereich noch einmal potenziert.
würde sich das passwort aus einem algorythmus ergeben, wäre die gefahr natürlich groß, wenn man die anderen faktoren kennt.
wie du nun die generierten passwörter deinen benutzern zuordnest ist ja niemandem bekannt. es ging dir ja nur um die generierung.
wenn die passwörter nun von 1 an linear generiert werden, ist bekannt, daß nur der anfang des bereiches für passwörter benutzt wird. hier wäre die chance größer, dies herauszufinden.
daher kannst du in der schleife die schrittweite erhöhen und die passwörter beser über den bereich verteilen.
Wenn Du Lust und Zeit hast, würde ich mich über noch mehr Erklärung freuen! Danke erstmal bis hierher.
Grüße KEvin