Hi Leutz, ich kniffel an einem Problem herum und bekomm es irgendwie nicht hin. Um einen Kollisionstest für einen Hash-Algorithmus zu realisieren (den ich zum testen für meine Login-Fkt. verwende), muss ich ein Array sozusagen "binär" (also mit Übertrag) hochzählen. Also: 0...z 00...0z; 01..0z; zz..zz 000...00z; 001...01z; zzz...zzz usw., bis ich bei einer Länge n ankomme. Nur krieg ichs irgendwie nich hin, mir fehlt der richtige Kniff. Hat jemand ne Idee? VG, /th.
>Also: >0...z >00...0z; 01..0z; zz..zz >000...00z; 001...01z; zzz...zzz Hä? Ich versteh nicht was du meinst
also, binär sieht das ganze ja so aus: 0 1 10 11 100 101 110 111 usw... Nur, dass ich nciht 0,1 sondern '0' - 'z' haben möchte als Elemente eines strings / arrays. VG, /th.
Also du willst Strings bauen? mit folgendem Inhalt: '0' '1' '2' '3' ... ??? dann ?? > sondern '0' - 'z' haben möchte als Elemente >eines strings / arrays. Gib doch mal ein Beispiel wie das aussehen soll
ok, wird etwas länger 0 1 2 3 ... A B ... z 00 01 02 ... 0A 0B ... 0z 10 11 ... 1A 1B ... 1Z 20 21 22 ... 2A ... 2z 30 ... 100 101 102 ... usw... so weit hab ichs "schon":
1 | for(len=1; len<30; len++) |
2 | {
|
3 | thprintf(" %i", len); |
4 | |
5 | for(k=0; k<len; k++) |
6 | {
|
7 | for(charNum=48; charNum<123; charNum++) |
8 | {
|
9 | testStr[len-k-1] = charNum; |
10 | }
|
11 | }
|
12 | }
|
aber irgendwie baut's nur mist!
Im Grunde brauche ich ein Konstrukt für n ineinander verschachtelte Schleifen... VG, /th.
Du willst im 62er-System zählen? Sehe ich das richtig? Das sollen wohl die Test-Paßworte werden? Wieso zählst du nicht einfach binär hoch und wandelst anschließend in das System mit Basis 62? Dann mußt du nur eine Binär->ASCII-Wandlung entsprechend umbauen. Tipps, wie man sowas macht, kannst du dir in den Quellen einer Binär->ASCII-Wandlungs-Routine besorgen, die nach Hexadezimal wandelt.
Die Funktion itoa kann hier gute Dienste leisten - der nämlich kann man die Basis des zu verwendenden Zahlensystemes mitgeben. Allerdings habe ich nicht getestet, was sie ausgibt, wenn man 62 angibt. Ah, die geht wohl nur bis 36. Aber den Quelltext der Funktion wird man irgendwo finden - und den könnte man anpassen.
Rufus t. Firefly wrote: > Die Funktion itoa kann hier gute Dienste leisten - der nämlich kann man > die Basis des zu verwendenden Zahlensystemes mitgeben. Allerdings habe > ich nicht getestet, was sie ausgibt, wenn man 62 angibt. > > Ah, die geht wohl nur bis 36. Aber den Quelltext der Funktion wird man > irgendwo finden - und den könnte man anpassen. A-Z und 0-9 macht 36 Ziffern.
Um mal etwas vor deinem Problem anzufangen: Warum willst du denn deinen eigenen Hash Algorithmus verwenden? Das ist genau so eine Schnaps Idee wie seinen eigenen Verschluesselungsalgorithmus zu entwickeln. Das sollt man einfach seinlassen da man auf vorhandene Methoden zurueckgreifen sollte. Es gibt so viele Wissenschaftler die sich dieser Probleme schon gewidmet haben und schon gute Hash Funktionen fuer alle moeglichen Anwendungsgebiete entwickelt haben. Benutzt doch die.
> > Ah, die geht wohl nur bis 36. Aber den Quelltext der Funktion wird man > > irgendwo finden - und den könnte man anpassen. > > A-Z und 0-9 macht 36 Ziffern. Liest Du auch die Beiträge, auf die Du antwortest?
PS: Nur damit du dir eine "Gefuehl" bekommst wie viele Strings du austesten musst wenn du nur alle 1-6 stelligen PW ausprobieren willst: 2.565.726.409 (37^6) Bist du sicher du willst das machen? Ist dein Ansatz geeignet? D.h. hast du so viel RAM? Wie gesagt und dann bist du nur 6 stellig. Da kann es sein das bis dahin keine einzige Kollision auftaucht und dann sofort ab 8stellt (nur ein Bsp) Millionen von Kollisionen dir passieren. Wie gesagt: Die ganze Theorie ist nicht einfach und viel Prof. forschen an solchen Sachen Jahrzehnte lang.
Anon Nymous wrote:
> viel Prof. forschen an solchen Sachen Jahrzehnte lang.
Aber jeder hat mal klein angefangen ;-)
Random ... wrote: > Im Grunde brauche ich ein Konstrukt für n ineinander verschachtelte > Schleifen... ... und n ist variabel das geht über eine Rekursion (ungetestet) void count( int n ) { if( n == 0 ) return; for( int i = 0; i < irgendwas; ++i ) printf( "%d", i ); count( n - 1 ); } }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.