PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : problem mit crypt()



Hotnine
18-08-2001, 16:30
hi!

bin absoluter Neuling in C++(mach ne Ausbildung *freu).
Und nun wollte ich ein wenig rumspielen und wollte mit crypt() was machen, aber das klappt nicht!
Quellcode:<COde>

#include <iostream.h><BR>
#include <crypt.h><BR>
#define _XOPEN_SOURCE<BR>
#include <unistd.h><P>

int main()<BR>
{<P>
char Crypted;<BR>
Crypted = crypt("hallo");<P>


cout << Crypted << flush;<BR>
return 0;<BR>
}<P>
</CODE>
Fehlermeldung:<CODE><BR>
p2.cpp: In function `int main()':
/usr/include/crypt.h:33: too few arguments to function `char * crypt(const char *, const char *)'
p2.cpp:10: at this point in file
p2.cpp:10: assignment to `char' from `char *' lacks a cast

<P>
hoffe einer kann mir Helfen!

CU Till

iGEL
19-08-2001, 01:38
Moin!

Ich kenne crypt zwar nicht, aber die Fehlermeldung bedeutet, dass crypt zwei Parameter vom Typ *char erwartet, du übergibst aber nur eines ("hallo"). Tipp mal "man crypt" in deine Konsole ein, da wird die Funktion beschrieben. Allerdings hab ich die Sache mit dem Salt nicht so recht verstanden...

cu Johannes

thommy
20-08-2001, 08:35
Die Variable Crypted muss vom Typ char* sein (nicht char).

Dann erwartet die Funktion crypt zwei Argumente, das zu verschlüssende Passwort und das "Salz in der Suppe". Dabei handelt es sich um eine beliebige 2-stellige alphanumerische Zeichenfolge, die den internen Ablauf von crypt auf eine von 4096 möglichen Varianten lenkt. Wenn zum selben Passwort unterschiedliches Salz gestreut wird, ergeben sich verschiedene verschlüsselte Zeichenfolgen.

Thomas

Hotnine
20-08-2001, 18:15
Hi!

cool, du Dresdner!? ich auch zumindest fast, wohne am Rand und bin jeden Tag drinne.
klappt irgendiwe nicht richtig, könntest du mir eventuell irgend ein ganz einfachen Quelltext, der funktioniert posten? wäre nett.

Vielleicht treffen wir uns mal!?

CU Till

thommy
21-08-2001, 07:14
Dieses Programm funktioniert:
http://www.linuxfibel.de/scripts.htm#crypt

Thomas

PS: Auf'n Bier geht's immer;-)

Hotnine
21-08-2001, 16:41
hi!

mmh, funktioniert zwar, was schonmal sehr gut ist :) aber, es ist leider kein c++ code und außerdem, versteh ich den code nicht, was eigentlich viel schlimmer ist ;) denn wir sind ja keiner fensterer :))
also, falls eienr mir einer den code in c++ geben könnte, so das ich ihn verstehe, wäre ich echt sehr dankbar.

CU Till

thommy
22-08-2001, 07:47
#include <iostream>
#include <crypt.h>

int main(int argc, char** argv)
{
if (argc != 3) // 1. Argument ist Programmname + 2 Argumente (Passwort, Salz)
{
cerr << argv[0] << " erwartet 2 Argumente" << endl; // argv[0] enthält
Programmnamen
return 1;
}

cout << crypt(argv[1],argv[2]);

return 0;
}

Bei solchen simplen Programmen unterscheiden sich C und C++ nunmal nicht (sieht man von printf vs. cout einmal ab).

Zu Übersetzen ist das Programm mit

g++ Progname.cc -o Progname -lcrypt

Thomas

[ 22. August 2001: Beitrag editiert von: thommy ]

Hotnine
22-08-2001, 21:19
hi!

vielen dank, habe hauptsächlich, dass mit den übergaben an das programm nicht verstanden.
Aber werde noch ein wenig damit rumspielen, dann dürft ich's ganz durchschaut haben ;).
nochmals vielen Dank!

CU Till