Passwort veschlüssleln [GELÖST]
-
gh753 schrieb:
Ich schreibe mitt Dev-c++ wenn du das meinst bin anfänger
-
Also so hätte ich es gemacht:
#include <iostream> #include <conio.h> using namespace std; int main(void){ string passwort; cout << "Passwort: "; while(true){ char input; input = getch(); if (input == 13) //Wenn Eingabe == ENTER break; passwort += input; cout << "*"; } return 0; }
-
Ist die Zielanwendung des Programmes wirklich eine Windows-Anwendung oder doch eine Konsolen-Anwendung?
-
MGOS danke
Kanst du mir sagen wo ich das einfügen muss? Ich dachte zwischen 14 und 15 aber dann hatt es zwar das passwort verschlüsselt aber es hatt das internet nicht geöffnet
1 #include <cstdio>
2 #include <cstdlib>
3 #include <iostream>
4 #include <windows.h>
5 #include <shellapi.h>
6 using namespace std;
7
8 int main( int nNumberofArgs, char* pszArgs[])
9 {
10 int Passwort;
11
12 wennFalsch:
13
14 cout << "Geben Sie das Passwort ein:";
15 cin >> Passwort;
16
17 if (Passwort == 123)
18 {
19 ShellExecute(NULL, "open", "www.google.de", NULL, NULL, SW_SHOW);
20 }
21
22 if (Passwort != 123)
23 {
24 goto wennFalsch;
25 }
26 system("PAUSE");
27 return 0;
28 }
-
@gh753: Also erstmal Compiler und Betriebssystem sind für dein Unterfangen wichtig.
Dein Compiler ist MinGW (eine schon ältere Version, da Dev-C++ schon lange nicht mehr weiterentwickelt wird).Das ist in sofern relevant, da die Funktionen, die du benötigst Plattform- und teilweise auch Compilerabhängig sind.
@MGOS: Dein Rat ist gut gemeint, wird gh753 aber nicht wirklich helfen.
conio.h ist eine Compilerspezifische Erweiterung und gehört nicht zum C++ Standard.
Ursprünglich gehörte diese Datei zum Borland Compiler, jedoch liegt auch dem Microsoft C++ Compiler eine abgespeckte Version bei.Da ich einem Anfänger jetzt nicht zumuten möchte, direkt mit der Windows API die Funktionalität von getch() zu emulieren, wären die beiden einfachsten Ansätze:
1.: Benutzung eines anderen Compilers (z.B. Visual C++ 2010 Express)
-> http://www.microsoft.com/germany/express/products/windows.aspx (kostenlos)2.: Verwendung des conio-2 DevPaks (ein Paket speziell für Dev-C++,
welches die eine conio.h installiert)
siehe hier: http://devpaks.org/details.php?devpak=16Außerdem möchte ich dich darauf hinweisen, dass das was du vorhast NICHTS mit VERSCHLÜSSELUNG zu tun hat. Du möchtest einfach die eingegebenen Zeichen verbergen.
@MGOS: An deiner Implementation wäre zudem zu kritisieren, dass du nicht auf Backspace reagierst.
Wenn jemand sich vertippt hat und das letzte Zeichen löschen will,
so würde dein Code dem internen String ein '\b' hinzufügen und ein neues Sternchen schreiben,
was in dem Fall nicht intuitiv wäre.Also überlegt Euch was, wie Ihr dieses Manko noch lösen könnt
-
Probier mal das:
#include <windows.h> #include <conio.h> #include <iostream> #include <string> int main(int argc, char ** argv) { std::string const PASSWORD("The matrix has you!"); std::cout << "Passwort: "; std::string pw; while ((int c = getch()) != '\n') { switch (c) { case '\r': break; case '\b': { if (pw.size() > 0) { pw.erase(pw.size() - 1, 1); std::cout << "\b \b"; } } break; default: pw += c; std::cout << "*"; } } if (pw == PASSWORD) { ShellExecute(NULL, "open", "www.google.de", NULL, NULL, SW_SHOW); } return 0; }
Noch vorhandene Probleme:
Bei Drücken von Sondertasten wie Pfeiltasten oder Funktionstasten liefert getch hintereinander 2 Codes. Theoretisch müsstest du also die Eingaben nochmal filtern um sicher zu gehen,
dass derartige Falscheingaben ignoriert werden.Ansonsten wäre anzumerken, dass du dir system(...) gar nicht angewöhnen solltest.
Ebenso frage ich mich wie du auf das goto kamst.
Gewöhn dir das auch gleich wieder ab^^
goto ist ein Überbleibsel als längst vergangenen Zeiten und nicht mehr zu empfehlen.
Alternativen sind die geläufigen Kontrollstrukturen if/for/do/while...
-
Einen modalen Dialog mittels
DialogBoxParam
anzeigen (der Parameter ist ein Zeiger auf einen string, in den das Passwort in der DlgProc geschrieben werden soll), der ein Textfeld mit dem Stil ES_PASSWORD enthält (als ElternfensterGetConsoleWindow()
eintragen) und diesen erst bei abgeschlossener Eingabe schließen.
Das könnte man mit einem unsichtbaren Default-Button gut lösen.
-
Danke DrakoXP
Ich habe mir das Programm das du empfohlen hast runterladen. Wenn du mit system -System (PAUSE )- gemeint hast das steht nur da damit ich Fehlermeldungen in der Konsole lesen kann das kommt wider raus. Der goto Befehl war einfach in meinem kopf weiß selber nicht woher.
Bei visual c++ kommt eine Fehlermeldung das es zb. den cout << und den cin>> Befehl nicht gibt warum?
-
wegen namespace std.
Die beiden Oblekte cin und cout befinden sich im NAmensraum std.
du schreibst also entweder am Anfang
using namespace std;
oder du schreibst eben überall sonst
std::cin >> blub; std::cout << "bla" << std::endl;
-
Danke drakoXP und alle anderen