Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: Projekte ::  AES: Test und Meinung  
Gehen Sie zu Seite Zurück  1, 2, 3, 4, 5  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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? :eek: :eek:
Swordfish
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.03.2005
Beiträge: 4177
Beitrag 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
Beitrag 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
Code:
a
b


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
Beitrag 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
Beitrag 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
Beitrag hustbaer Mitglied 01:46:39 02.05.2008   Titel:              Zitieren

Mich wundert dass noch niemand was über die IMO grauenhafte Idee gesagt hat Speicher in der encrypt/decrypt Funktion zu reallokieren.

_________________
"Let there be Licht..." http://lichttools.sourceforge.net/
Sehr cooles ASCII Spiel (leider nicht von mir): ASCII-Scramble - http://www.roskakori.at/ascii/
c++.de :: Projekte ::  AES: Test und Meinung  
Gehen Sie zu Seite Zurück  1, 2, 3, 4, 5  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.