mikrocontroller.net

Forum: Offtopic arrayelemente hochzählen, nur wie?


Autor: Random ... (thorstendb) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Also:
>0...z
>00...0z; 01..0z; zz..zz
>000...00z; 001...01z; zzz...zzz


Hä?

Ich versteh nicht was du meinst

Autor: Random ... (thorstendb) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erklär doch mal, was du eigentlich genau machen willst.

Autor: Random ... (thorstendb) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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":
for(len=1; len<30; len++)
{
  thprintf(" %i", len);
      
  for(k=0; k<len; k++)
  {
    for(charNum=48; charNum<123; charNum++)
    {
      testStr[len-k-1] = charNum;
    }
  }
}

aber irgendwie baut's nur mist!

Autor: Random ... (thorstendb) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Grunde brauche ich ein Konstrukt für n ineinander verschachtelte 
Schleifen...

VG,
/th.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Anon Nymous (fuechslein)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> > 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?

Autor: Anon Nymous (fuechslein)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anon Nymous wrote:
> viel Prof. forschen an solchen Sachen Jahrzehnte lang.

Aber jeder hat mal klein angefangen ;-)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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, Yahoo oder Facebook? Keine Anmeldung erforderlich!
Mit Google-Account einloggen | Mit Facebook-Account einloggen
Noch kein Account? Hier anmelden.