Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » C++ Frage

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.10.2006, 21:45 Uhr
BlueFlame



Ich versuch in C++ eine DLL zu programmieren, leider lerne ich noch und
bei den Stellen mit den Fragezeichen brauch ich hilfe, weil ich nicht weiß wie man ord() und
chr() in C++ macht. Und einzelnen zeichen in einem string lesen kann: string_char_at()
ich hoffe jemand kann mir helfen.


C++:
// Define export macro
#define export extern "C" __declspec( dllexport )

// include the headers
#include <windows.h>
#include <string.h>

// RC4 Encryption
int key[256], box[256];
int pwdlen, datalen, i;
PCHAR result = "";

export double crypt(PCHAR data, PCHAR pwd)
{
    key[256] = 0; box[256] = 0;
    pwdlen = strlen(pwd);
    datalen = strlen(data);
    result = "";
    for(i = 0; i < 256; i+=1) {
          key[i] = ???ord(string_char_at(pwd,(i mod pwdlen)+1));???
          box[i] = i;
          }
    j = 0;
    for(i = 0; i < 256; i+=1) {
          j = (j + box[i] + key[i]) mod 256;
          tmp = box[i]; box[i] = box[j]; box[j] = tmp;
          }
    a = 0; j = 0;
    for(i = 0; i < datalen; i+=1) {
          a = (a + 1) mod 256;
          j = (j + box[a]) mod 256;
          tmp = box[a]; box[a] = box[j];
          box[j] = tmp;
          k = box[(box[a] + box[j]) mod 256];
          result += ???chr(ord(string_char_at(data,i+1)) ^ k);???
          }
    return strcat(result);
}

Dieser Post wurde am 21.10.2006 um 21:50 Uhr von BlueFlame editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.10.2006, 23:38 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


was soll denn ord und chr sein?
Dieser Post wurde am 21.10.2006 um 23:39 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.10.2006, 09:55 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ok, da scheint einer von VB aus zu kommen

chr macht imho aus einem Zeichen seinen ascii-code, ord aus einem ascii-code ein zeichen. In C++ ist das überflüssig, da jede Variable nur je nach Betrachtung unterschiedlich bei der ausgabe interpretiert wird.

Dann string_char_at ist so in der form auch "wurscht", da Zeichenketten "nur" Arrays sind, also Zugriff per Indexoperator.

Ansonsten sind da gewaltig viele Fehler drin:

PCHAR ist ein Pointer auf ein char (also char*) d.h "PCHAR result" zeigt auf den konstanten Speicherbereich "", der gerade mal ein Element enthält (nämlich '\0') d.h wenn du da was hinschreiben willst krachts.

Weiterhin kannst du Zeichenketten nicht mit + aneinanderfügen, zumindest keine char-arrays.

Dann frag ich mich was der falsche strcat-Aufruf da am Ende soll. Deine Funktion soll doch einen double zurückliefern (fliesskommazahl mit doppelter genauigkeit, also z.b 0.454345345453)

Dann die Initialisierungen:


C++:
key[256] = 0;



Er meckert da zwar nicht, nur schreibst du in den 257isten "Variableneintrag" eine 0 rein, du hast aber nur 256 -> crash bzw undefiniertes Verhalten.

Dann - warum benutzt du globale Variablen? Variablen immer mit dem kleinsten Gültigkeitsbereich definieren.

Ansonsten Modulvariablen immer static. Modulvariablen sind eben Variablen, die nur in der jeweiligen C++-Datei benutzt und gebraucht werden.

Hier mal so ungetestet:


C++:
export int crypt(char *data, char *pwd)
{
    int key[256], box[256];
    int pwdlen = strlen(pwd);
    int datalen = strlen(data);
    int i, j = 0, k = 0, l = 0, tmp = 0;
    int result = 0;

    for(i = 0; i < 256; ++i)
    {
          key[i] = pwd[ (i % pwdlen) + 1];
          box[i] = i;
    }

    for(i = 0; i < 256; ++i)
    {
          j = (j + box[i] + key[i]) % 256;
          tmp = box[i];
          box[i] = box[j];
          box[j] = tmp;
    }

    for(i = 0; i < datalen; ++i)
    {
          k = (k + 1) % 256;
          j = (j + box[k]) % 256;

          tmp = box[k];
          box[k] = box[j];
          box[j] = tmp;

          l = box[(box[k] + box[j]) % 256];
          result += data[i + 1] ^ l;
    }
    return result;
}



Achja, das double-result bringt ja irgendwo gar nix, da du nirgends ne kommazahl auch nur ansatzweise hast
--
class God : public ChuckNorris { };

Dieser Post wurde am 22.10.2006 um 09:57 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.10.2006, 11:00 Uhr
BlueFlame



Danke!
Oh man das ist komplizierter als ich dachte!

Ich habe alles gemacht, aber leider kommt immer der gleiche fehler:
[Build Error] ["RC4] Error 1

Ich habe keine ahnung was das heisst.

Dieser Post wurde am 22.10.2006 um 11:25 Uhr von BlueFlame editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.10.2006, 22:06 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi, schreib mal den kompletten Fehler was er schreibt, die Zeile dürfte ja nicht das einzige sein.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.10.2006, 22:12 Uhr
BlueFlame



Alles was kommt:
Crypt.dll
D:\RC4 Crypt\Makefile.win [Build Error] ["RC4] Error 1

sonst steht da nix :(

Dieser Post wurde am 22.10.2006 um 22:12 Uhr von BlueFlame editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: