# Passwortabfrage in C++



## Nigges (22. September 2004)

hallo,

ich bin recht neu in der sache aber ich soll eine passwortabfrage in c++ schreiben kann mir jemand sagen wie das geht?

danke


----------



## squeaker (22. September 2004)

benutzername und passwort einlesen und dann aus einer Liste den Benutzernamen heraussuchen und mit dem in der Liste gespeicherten Passwort vergleichen.


----------



## MetallDragon (22. September 2004)

hier eine kleine Funktion, um dei zwei Strings zu vergelichen. DEr REst sollte klar sein.
Es gibt sicherlich auch noch ne elegantere Methode aber ich habe auf die schnelle keine CPP-Integrierte Lösung gefunden...

```
bool vergleich(char a[], char b[])
{
int i=0; 	//counter
bool status;	//status-wert		
 if(sizeof(a)==sizeof(b))//Wenn die groesse gleich ist...
 {
  for(i=0;i<sizeof(a)/*weil char = ein byte */;i++)
  {
   if(a[i]==b[i])//Eine Zelle nach der anderen abgleichen
   {
    status=true; //bei uebereinstimmung der Zellen den status-wert auf true 
                 //setzen
   }
   else
   { 
    status=false;//bei nicht-uebereinstimmung status-wert auf false setzen und  		 //abbrechen
    break;
   }
  }
 }
 else {status=false;}//Wenn die groesse nicht gleich ist den status-wert auf    		     //false setzen
 
 //durch status-wert den rueckgabewert auswaehlen
 if(status==true) {return 1;}
 else {return 0;}

};
```


Viel Spass damit.]


----------



## Thomas Kuse (22. September 2004)

Wenn schon in C char Arrays vergleichen dann bitte so:
strcmp


> * strcmp*
> Syntax
> 
> #include <string.h>
> ...


----------



## Thomas Kuse (22. September 2004)

In C++ sieht eine kurze Passwortabfrage dann so aus:


```
#include <string>
using namespace std;
...
string sInputLogin;
string sInputPass;

cout << "Login: ";
cin >> sInputLogin;
cout << "Password for " << sInputLogin << ": ";
cin >> sInputPass;

if(sInputLogin == "admin" && sInputPass == "qwertzuiop")
    cout << "Login OK" << endl;
else{
    cout << "Login failed" << endl;
    return;
}
```


----------



## squeaker (23. September 2004)

ist strcmp nicht die Funktion die für die meissten Bufferüberläufe zuständig ist?


----------



## NeoTrace (23. September 2004)

hallo erst mal,

habe eine kleine frage dazu:

habe ich die möglichkeit  per escape sequenz (in der Windows Konsole) den hintergrund und die schriftfarbe zu ändern? 

Ziel: es soll vermieden werden das jeman bei der passworteingabe das passwort lesen kann.

programmiere mit ms visual c++ 6.0

MFG und vielen Dank


----------



## MetallDragon (23. September 2004)

@Thomas: Wie gesagt es gibt auch noch elegantere Lösungen. Nur bei der beschreibung, die ich von strcmp hatt stand drin, dass es in erster Linie die Länge der Zeichenketten vergleicht.
Aber wenn die Funktiojn auch den Inhalt vergleicht würde ich auch strcmp nehmen...


----------



## Thomas Kuse (23. September 2004)

In der Windows-Konsole geht das nur über Umwege (extra-Bibliotheken)

Die Sache zu strcmp:
Solange man weiss, dass strcmp bis zu einem \0 alle chars (deren ASCII-Code) vergleicht, muss einem natürlich auch klar sein, dass  wenn es kein \0 am Ende gibt natürlich ein Speicherfehler auftreten kann (bzw höchstwahrscheinlich wird)

*strncmp* einem Programmier-Anfänger zu propagieren finde ich überflüssig. Im Laufe der Programmierung setzt man sich schon noch mit den ganzen n-Funktionen auseinander.
Und wenn nicht, dann sollte man lieber gleich zu string aus der STL greifen.

Meine Meinung: *ANSI C ist halt nichts für Anfänger, aber gut um anzufangen.*

Zum ANSI C programmieren gehört natürlich auch *valgrind*, da werden evt. Speicherlecks sehr gut sichtbar.


----------

