| Autor |
Nachricht |
Badestrand
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
|
Badestrand Mitglied
23:46:28 30.04.2008 Titel: |
|
Zitieren |
Ich hätte eine Frage zur Verwendung: Was geben encrypt und decrypt genau zurück? Und 'key' ist ein nullterminierter String? |
Zuletzt bearbeitet von Badestrand am 23:49:03 30.04.2008, insgesamt 1-mal bearbeitet |
|
 |
Swordfish
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.03.2005
Beiträge: 4177
|
Swordfish Mitglied
09:55:57 01.05.2008 Titel: |
|
Zitieren |
aes::encrypt( ) und aes::decrypt( ) geben die Anzahl der Verarbeiteten Blöcke (16 Bytes) zurück, und - ja, der Schlüssel ist ein Null-Terminierter String. Im finalen else Zweig in aes::set_key( ) fehlt übrigens ein return vor false.
Ist schon komisch, wenn man sich alte Sources nach (nur) zwei Jahren wieder ansieht.
cheers, Swordfish |
_________________ Thou shall not fflush stdin!
Thou shall not cast void pointers! And therefore
Thou shall not cast the result of malloc!
Zuletzt bearbeitet von Swordfish am 10:07:35 01.05.2008, insgesamt 1-mal bearbeitet |
|
 |
Yazoo
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.07.2007
Beiträge: 176
|
Yazoo Mitglied
13:28:40 01.05.2008 Titel: |
|
Zitieren |
ich hab den code ma in meinen compiler eingefügt aber der sagt:
| Code: | | "data.cpp": E2268 Aufruf der undefinierten Funktion '_stricmp' in Funktion main(int,char * *) in Zeile 30 | | |
_________________ Realität ist eine durch Alkoholmangel hervorgerufene Illusion.
Die Wege eines Compilers sind unergründlich.
|
|
 |
Swordfish
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.03.2005
Beiträge: 4177
|
Swordfish Mitglied
13:47:19 01.05.2008 Titel: |
|
Zitieren |
Dann ist dein Compiler (welcher?) nicht Standardkonform.
cheers, Swordfish
PS: Du könntest es mit der POSIX-Funktion stricmp( ) (ohne Unterstrich) versuchen. |
_________________ Thou shall not fflush stdin!
Thou shall not cast void pointers! And therefore
Thou shall not cast the result of malloc!
|
|
 |
kiddo2711
Mitglied
Benutzerprofil
Anmeldungsdatum: 26.06.2006
Beiträge: 8
|
kiddo2711 Mitglied
13:51:36 01.05.2008 Titel: |
|
Zitieren |
| Zitat: | | Dann ist dein Compiler (welcher?) nicht Standardkonform. | Willst du damit sagen das _stricmp zum C++ stan**** gehört? |
|
|
|
 |
Swordfish
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.03.2005
Beiträge: 4177
|
Swordfish Mitglied
14:05:23 01.05.2008 Titel: |
|
Zitieren |
Sorry, hab' mich verlaufen. _stricmp( ) und stricmp( ) sind beide nicht Standard. Die Meisten C/C++ Bibliotheken (glibc, Dinkumware auf jeden Fall) implementieren sie jedoch.
Da _stricmp( ) nur zur Argumentprüfung verwendet wird, kann man es getrost durch std::strcmp( ) austauschen und beide Strings vor der Prüfung auf Lower-/Uppercase bringen.
cheers, Swordfish |
_________________ Thou shall not fflush stdin!
Thou shall not cast void pointers! And therefore
Thou shall not cast the result of malloc!
|
|
 |
Yazoo
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.07.2007
Beiträge: 176
|
Yazoo Mitglied
14:49:27 01.05.2008 Titel: |
|
Zitieren |
ich hab ma versucht das auf text anzuwenden, den der benutzer selbst eingibt, aber es klappt net:
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include "aes.h"
#include <iostream>
using namespace std;
int main()
{
aes AES;
char t;
char p;
char *text = &t;
char *pwd = &p;
cin >> t;
cout << "\n";
cin >> p;
AES.encrypt(&text,
strlen(&t),
pwd);
cout << "\n";
cout << "\n";
cout << "Verschlüsselt:\n";
cout << text << endl;
AES.decrypt(&text,
strlen(&t),
pwd);
cout << "Entschlüsselt:\n";
cout << text;
return 0;
} | |
das is mitlerweile mein 3. versuch aber es will einfach net klappen, abgesehen davon, dass man nur ein zeichen eingeben kann.
wenn ich
eingebe kommt heraus:
| Code: | Verschlüsselt:
V/çàðEŒ/³A;X:
Entschlüsselt:
$I¡QŒ-'ͳôçâ'ÙÄ | | |
_________________ Realität ist eine durch Alkoholmangel hervorgerufene Illusion.
Die Wege eines Compilers sind unergründlich.
Zuletzt bearbeitet von Yazoo am 14:49:42 01.05.2008, insgesamt 1-mal bearbeitet |
|
 |
Swordfish
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.03.2005
Beiträge: 4177
|
Swordfish Mitglied
20:22:06 01.05.2008 Titel: |
|
Zitieren |
Naja, was bei deinem Code rauskommt ist eher Zufall als Verschlüsselung.
Du solltest dich mal mit Pointern und Zeichenkettenrepräsentation in C/C++ beschäftigen, das gelernte dann wieder verdrängen und std::string nehmen Kurz gesagt: in einen char passt nur ein einzelnes Zeichen.
Ein Beispiel:
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <iostream>
#include "aes.h"
int main( )
{
std::string input;
std::string password;
// Eine Zeile nach 'input' lesen:
std::cout << "Bitte geben Sie den zu verschluesselnden Text ein:\n";
std::getline( std::cin, input );
// Ein Wort als Key nach 'password' lesen:
std::cout << "Bitte geben Sie ein Passwort ein: ";
std::cin >> password;
// Eine 'aes'-Instanz:
aes AES;
// Den Text zur Kontrolle einmal als Text, einmal als Hex-Werte ausgeben:
std::cout << "\n\nUnverschluesselter Text:\t\"" << input << "\"\n";
std::cout << "Unverschluesselte Daten:\t";
for( std::string::iterator i = input.begin( ); i != input.end( ); ++i ) {
std::cout << "0x";
std::cout.width( 2 );
std::cout.fill( '0' );
std::cout << std::hex << static_cast< int >( *i ) << " ";
}
// Ein char-Array zum rumspielen mit AES daraus backen:
size_t length = input.length( );
char *data = new char[ length ];
std::copy( input.begin( ), input.end( ), data );
std::cout << "\n\nVerschluesselung...\n\n"; // <- nomen est omen
size_t blocks = AES.encrypt( &data, length, const_cast< char* >( password.c_str( ) ) );
// Verschluesselte Daten ausgeben (nur Hex, als Zeichenkette bringt's ned wirklich was...)
std::cout << "Verschluesselte Daten:\t\t";
for( size_t i = 0; i < ( blocks * 16 ); ++i ) { // wir haben 'blocks' blöcke à 16 Bytes bekommen
std::cout << "0x";
std::cout.width( 2 );
std::cout.fill( '0' );
std::cout << std::hex << ( static_cast< int >( data[ i ] ) & 0x0ff ) << " ";
}
std::cout << "\n\nEntschluesselung...\n\n"; // <- ... one way, or another, i'm gonna ... decrypt u! resistance is futile!!!111elf *sing*
AES.decrypt( &data, blocks * 16, const_cast< char* >( password.c_str( ) ) ); // vorsicht: mehr Daten!
length = strlen( data );
// Entschluesselte Daten als Hex-Werte und Text anzeigen.
std::cout << "Entschluesselte Daten:\t\t";
for( size_t i = 0; i < length; ++i ) {
std::cout << "0x";
std::cout.width( 2 );
std::cout.fill( '0' );
std::cout << std::hex << ( static_cast< int >( data[ i ] ) & 0x0ff ) << " ";
}
std::cout << "\nEntschluesselter Text:\t\t" << data << std::endl;
} | |
cheers, Swordfish |
_________________ Thou shall not fflush stdin!
Thou shall not cast void pointers! And therefore
Thou shall not cast the result of malloc!
Zuletzt bearbeitet von Swordfish am 20:24:20 01.05.2008, insgesamt 1-mal bearbeitet |
|
 |
Blue-Tiger
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.11.2002
Beiträge: 2980
|
Blue-Tiger Mitglied
23:28:10 01.05.2008 Titel: |
|
Zitieren |
Wenn du nach 2 Jahren immer noch Kommentare zum Code willst: das Ganze in 'ne Klasse zu packen find ich haesslich |
_________________ I have come here to chew memory and kick ass... and malloc() is returning a null pointer.
This message has been ROT-13 encrypted twice for higher security.
http://bluetiger.bauchlandung.org/
|
|
 |
hustbaer
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.10.2006
Beiträge: 16044
|
hustbaer Mitglied
01:46:39 02.05.2008 Titel: |
|
Zitieren |
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum nicht antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|