# [C] Passwort Generator



## Net_Ghost03 (26. September 2005)

Hallo, ich Programmiere noch nicht so lange, daher wollte ich um übung zu bekommen ein kleines Programm schreiben.
 Ein Passwort Generator.
 Er soll eine bestimmte anzahl von passwörtern, bei denen man die zeichenlänge bestimmen kann, in eine textdatei schreiben.

 Leider bin ich noch lange nicht so weit.
 Ich hänge noch beim Generator.
 Ich weiß das man das mit rand() generieren kann.
 Dann brauch ich noch die ASCII tabelle. Es sollen klein-und großbuchstaben enthalten sein, sowie zahlen und sonderzeichen.
 Das wäre von dez 48 bis 172.
 Außerdem soll der ja nicht nur 1 zahl generieren sonder x zeichen und das y mal .

 Aber ich hab auch etwas Probleme mit dem Rand() und dem werte bereich. Ich weiß nicht genau wie das geht, mit diesem modulator.


```
#include <stdio.h>
 #include <conio.h>
 #include <stdlib.h>
 #include <time.h>
 
 int main (int argc, char *argv[]) 
 {
   int eingabe,lang;  
   char zufallszahl;
 
 	 
    srand(time(0));				    /* Inizialisiert den Generator */
    zufallszahl = (rand() % 76 + 58);  /* Generiert die Zahl */
   
    
    printf("%c%",zufallszahl);
 	 
 	
 	
 getch();
 return 0;
 }
```
 
 Gruß,
 Net_Ghost03


----------



## deepthroat (26. September 2005)

Hi.

Der folgende Code generiert eine Zufallszahl im Bereich von 1 bis 10.

```
int j;

j = 1 + (int) (10.0*rand()/(RAND_MAX+1.0));
```

Für deine Zwecke mußt du nur die 10.0 durch (172-48+1) also 125.0 und die 1 durch 48 ersetzen:
	
	
	



```
int j;

j = 48 + (int) (125.0*rand() / (RAND_MAX+1.0));
```

Der Code sollte so (kompliziert) aussehen, damit die Werte auch möglichst "zufällig" sind. Wenn du das nur durch eine einfache Modulo-Operation machst, dann wirst du feststellen, das die Werte sich irgendwo wiederholen und kaum den ganzen Wertebereich abdecken.

/edit: Also die Werte wiederholen sich sowieso, aber eben nicht offensichtlich. Außerdem solltest du wissen, das der ASCII Code nur 7 Bit und damit nur 128 Zeichen besitzt. Es kommt darauf an welchen Zeichensatz du tatsächlich verwendest um zu wissen welche Zeichen generiert werden müssen. Z.B. hat das ä in der Codepage 437 den Code 132, im Windows Zeichensatz cp1252 allerdings den Code 228.


----------



## Net_Ghost03 (26. September 2005)

sorry hab mich beim zeichensatz verschrieben sollte von 48 das wäre 0 bis 127 gehen, das wäre ~.
 Und bei mir im Buch steht das der ASCII zeichensatz 8Bit hat und 128 zeichen.

 Dann wäre das ja 

```
j = 48 + (int) (80.0*rand() / (RAND_MAX+1.0));
```
 
 So jetzt generiert der mir ja eine zahl. Aber das Passwort soll ja mehr als 1 zeichen haben, es soll ja X zeichen haben. Je nachdem wie viele der benutzer eingegeben hat.
 Aber dann müsste der generator ja immer neue generieren und ich müsste den generator jetzt zB, 10 mal hinschrieben. Oder am anfang, z.B 15 gens machen und dann später je nach eingabe vorgeben 5 zeiche, 8 zeiche usw.
 und dann per switch und case machen.
 Aber wie kann ich das machen das der mir mehrere nacheinander generiert?
 Damit ich die in eine textdatei schreiben kann?


----------



## deepthroat (26. September 2005)

Net_Ghost03 hat gesagt.:
			
		

> sorry hab mich beim zeichensatz verschrieben sollte von 48 das wäre 0 bis 127 gehen, das wäre ~.
> Und bei mir im Buch steht das der ASCII zeichensatz 8Bit hat und 128 zeichen.





			
				http://de.wikipedia.org/wiki/ASCII hat gesagt.:
			
		

> ASCII beschreibt einen Sieben-Bit-Code. Dieser Code verwendet binäre Ganzzahlen, die mit sieben binären Ziffern dargestellt werden (entspricht 0 bis 127), um Informationen darzustellen. Schon früh haben Computer mehr als 7 Bits, oft mindestens Acht-Bit-Zahlenworte, verwendet – das achte Bit kann für Fehlerkorrekturzwecke (Paritätsbit) auf den Kommunikationsleitungen oder für andere Steuerungsaufgaben verwendet werden; heute wird es aber fast immer zur Erweiterung von ASCII auf einen der diversen Acht-Bit-Codes verwendet.





			
				Net_Ghost03 hat gesagt.:
			
		

> So jetzt generiert der mir ja eine zahl. Aber das Passwort soll ja mehr als 1 zeichen haben, es soll ja X zeichen haben. Je nachdem wie viele der benutzer eingegeben hat.
> Aber dann müsste der generator ja immer neue generieren und ich müsste den generator jetzt zB, 10 mal hinschrieben. Oder am anfang, z.B 15 gens machen und dann später je nach eingabe vorgeben 5 zeiche, 8 zeiche usw.
> und dann per switch und case machen.
> Aber wie kann ich das machen das der mir mehrere nacheinander generiert?
> Damit ich die in eine textdatei schreiben kann?


Mit einer Schleife?! ;-] 

```
int anzahl = 5; /* vom benutzer einzugeben */

while (anzahl-- > 0) {
  int j = 48 + (int) (80.0*rand() / (RAND_MAX+1.0));
  
  fprintf (datei, "%c", (char)j);
}
```


----------

