Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Passwort Programm im C programmieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.06.2005, 17:35 Uhr
dreamweaver



Hallo,

ich muss ein Log in Programm in C programmieren.
Es hat leider einen Fehler.

Hier erstmal der Code:


C++:
#include <stdio.h>
int checkPassword (char acEnteredPassword[], char acRealPassword[], int iLengthPassword);
int checkName (char acEnteredName[], char acRealName[], int iLengthName);
int main()
{
    char acEnteredPassword[1000];
    char acRealPassword[] = {'1','2','3','\0'};
    char acEnteredName[1000];
    char acRealName[] = {'U','s','e','r','\0'};
    int iLengthName = sizeof (acRealName);
    int iLengthPassword = sizeof (acRealPassword);
    int iNameRight;
    int iPasswordRight;
    
    printf ("Please etner your log in name: ");
    gets (acEnteredName);
    
    printf ("\nPlease enter the Password: ");
    gets (acEnteredPassword);
    
    checkName (acEnteredName, acRealName, iLengthName);
    if (iNameRight)
    {
        printf ("\nThe log in name is right!");
    }
    else
    {
        printf ("\nThis is the wrong log in name!");
    }
            
    checkPassword (acEnteredPassword, acRealPassword, iLengthPassword);
    if (iPasswordRight)
    {
        printf ("\nThe password is right!");
    }
    else
    {
        printf ("\nThis is the wrong password!");    
    }
    
    printf ("\n\n\n\n");
    
    system ("pause");
    
    return 0;
}

int checkName (char acEnteredName[], char acRealName[], int iLengthName)
{
    int iCount;
    int iNameRight = 1;
    
    for (iCount = 0; iCount < iLengthName; iCount = iCount + 1)
    {
        if (acEnteredName != acRealName)
        {
            return 0;
        }
    }
    return iNameRight;
}            
                

int checkPassword (char acEnteredPassword[], char acRealPassword[], int iLengthPassword)
{
    int iCount;
    int iPasswordRight = 1;
    
    for (iCount = 0; iCount < iLengthPassword; iCount = iCount + 1)
    {
        if (acEnteredPassword != acRealPassword)
        {
            return 0;
        }
    }
    return iPasswordRight;
}




Warum ist die Ausgabe immer right?
Bitte helft mir.
Es ist sehr dringend!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.06.2005, 17:43 Uhr
RedEagle



Zeichenkette müssen mit strcmp(..); verglichen werden:


C++:
if(strcmp(acEnteredName, acRealName) == 0) printf("Name ist richtig);

--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.06.2005, 17:48 Uhr
dreamweaver



Funktioniert leider trotzdem nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.06.2005, 17:50 Uhr
0xdeadbeef
Gott
(Operator)


Du weist den Prüfvariablen nirgendwo Werte zu.

Außerdem:

- NIE gets benutzen. Vor allem nicht bei sicherheitskritischen Aufgaben. Stattdessen fgets, oder auf GNU-Systemen getline (bzw. gleich getpass)
- Stringvergleiche in C mit strcmp, oder, wenns von Hand sein muss, die Strings auch indizieren und darauf achten, dass du nicht übers Ziel hinausschießt.

Zum Beispiel:

C++:
#include <stdio.h>

#define USER "User"
#define PASS "pwd123"

#define BUFLEN 100

int main(void) {
  char user[BUFLEN];
  char pass[BUFLEN];

  printf("Username eingeben: "); fflush(stdout);
  fgets(user, BUFLEN, stdin);
  printf("Passwort eingeben: "); fflush(stdout);
  fgets(pass, BUFLEN, stdin);

  if(strcmp(user, USER) == 0 && strcmp(pass, PASS) == 0) {
    puts("Richtig!");
  } else {
    puts("Falsch!");
  }

  return 0;
}


...wobei du in der Realität die Passwörter wohl eher als Prüfsummen in einer Datei speichern und innerhalb des Programms die Prüfsummen in Bezug auf die User in einer map halten würdest, das ganze also schon ne Ecke komplizierter ist.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 16.06.2005 um 17:51 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.06.2005, 18:02 Uhr
dreamweaver



Danke aber ich muss das mit Strings machen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: