2016-12-17 2 views
0

Ich habe vor kurzem angefangen zu lernen, C++ online und begann mit der Arbeit an diesem Code, aber brauche Hilfe mit den Fehlern, die der Compiler auf mich wirft. Grundsätzlich möchte ich nur ein Passwort vom Benutzer erhalten, wenn es das erste Mal ist, indem Sie "Flag" Variable verwenden und das Passwort in einer verschlüsselten Form in eine Textdatei schreiben. Wenn sich der Benutzer nicht zum ersten Mal anmeldet und ein Passwort gespeichert hat, lesen Sie den verschlüsselten Text, entschlüsseln Sie ihn und prüfen Sie, ob er dem vom Benutzer eingegebenen Passwort entspricht.C++ Verschlüsselung und Entschlüsselung Quellcode

#include<iostream> 
#include<string.h> 
#include<fstream> 
using namespace std; 
char encryptpass(char *pass) //function to encrypt 
{ 

    for(int i=0; pass[i] != '\0'; ++i) 
    char enpass[10]= ++pass[i]; 
    return(enpass); 


} 
char decryptpass(char *str) // function to decrypt 
{ 
for(; str!='\0'; ++str) 
char depass[10]= --str; 
return(depass); 

} 

int main()    // main function 
{ 
int flag=0; 
if(flag=0) 
{ 
    cout<<"enter your password"; 
    char pass[10]; 
    cin>>pass; 
    fstream file("userpass.txt",ios::in | ios::out); 
    file<<enpass[10]; 
} 
else 
{ 
    cout<<"enter password"; 
    cin>>pass; 
    bool check=false; 
    static char str[10]; 
    file.seekg(ios::beg); 
    file >> str; 
    file.close(); 
    decryptpass(str); 

    if(pass=depass) // decrypted password is equal to input password ? 
    { 
     check=true;  // set boolen value to true 
    } 
else 
{ 
    cout<<"incorrect password"; 
} 
    return(0); 
} // end of main 

der Compiler gibt diese Fehler -----

warning : In function 'void encryptpass(char*)': 
line 9 error: array must be initialized with a brace-enclosed initializer 
line 9 warning: unused variable 'enpass' [-Wunused-variable] 
line 10 error: 'enpass' was not declared in this scope 
line 10 error: return-statement with a value, in function returning 'void' [-fpermissive] 
warning : In function 'void decryptpass(char*)': 
line 17error: array must be initialized with a brace-enclosed initializer 
line 17 warning: unused variable 'depass' [-Wunused-variable] 
line 18 error: 'depass' was not declared in this scope 
line 18 error: return-statement with a value, in function returning 'void' [-fpermissive] 
warning : In function 'int main()' 
line 25 warning: suggest parentheses around assignment used as truth value [-Wparentheses] 

line 31 error: 'enpass' was not declared in this scope 
line 36 error: 'pass' was not declared in this scope 
line 39 error: 'file' was not declared in this scope 
line 43 error: 'depass' was not declared in this scope 
+2

Sie haben nicht gefragt, aber ich denke, Sie sollten wissen, dass das nicht der richtige Weg ist, um Passwörter zu tun. Über den Code selbst ... Lerne, wie du nie in solch ein Chaos gerätst. Starten Sie ein Projekt, indem Sie nur ein kleines bisschen Code schreiben. Holen Sie sich das kleine bisschen zum Kompilieren und machen Sie das Richtige. (Das "Richtige" an diesem Punkt wird nicht viel sein.) Fügen Sie ein bisschen mehr hinzu, kompilieren und testen. Und so weiter und so weiter. Sobald Sie den Dreh raus haben, wird "der Fehler" leicht zu finden sein, denn es wird das Letzte sein, was Sie geändert haben. –

+0

Ich würde sicherlich den Code nach der vorgeschlagenen Methode neu schreiben. danke für den Vorschlag. – binu23

Antwort

1

Sie Compiler Ausgabe erscheint nicht Ihre Quelle entsprechen, zum Beispiel Der Rückgabetyp von encryptpass ist void nach dem Compiler.

Der erste Fehler ist, weil char empass[10] eine Deklaration für ein char Array der Größe 10 ist, aber Sie verwenden es wie ein char lvalue. So erklären sie zuerst vor der for-Schleife:

char empass[10]; 

Dann in der for-Schleife Sie das i-te Element des codierten Passwort mit

empass[i] = ++pass[i]; 

jedoch der Code auch modifiziert das Passwort festgelegt würden dass Sie an die Funktion übergeben: ++pass[i] Inkremente pass[i] von eins. Willst du das wirklich?

+0

was ich dachte, in der Verschlüsselungsfunktion würde das Passwort inkrementiert werden und dann in die Textdatei geschrieben werden. während der Entschlüsselung des Passwortes würde wieder auf den ursprünglichen Text dekrementiert werden. ist die Logik falsch? – binu23

+0

der Compiler-Ausgang und Code-Konflikt scheint zu passieren, weil versucht wurde, die Fehler zu lösen, indem Sie den Rückgabetyp der Funktionen ändern. – binu23

+0

Nichts ist falsch mit der Logik, aber einige Probleme mit Ihrem Code. Warum würden Sie die Compiler-Ausgabe von einer älteren Version Ihres Codes veröffentlichen? Folgendes passiert, wenn ich den Code, den Sie gepostet haben, kompiliere (http://ideone.com/Z0hs61). –

Verwandte Themen