Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Übersetzungsprobleme c -> delphi (https://www.delphipraxis.net/73300-uebersetzungsprobleme-c-delphi.html)

Hybrid666 15. Jul 2006 12:37


Übersetzungsprobleme c -> delphi
 
Hi,

ich hab folgendes problem, ein kumpel hat mich gebeten einen code von ihm in delphi zu übersetzen...

diesen hier:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
  // Viaiablen aufmachen
  int i, j;
  char text[64];
  char textneu[64];
  char schluessel[32];
  // text und schlüssel einlesen
  printf("Text eingeben.\n");
  gets(text);
  printf("Schluessel eingeben.\n");
  gets(schluessel);
  // verschlüsseln
  for (i=0 , j = 0; text[i] != '\0' ; i++ , j++ )
  {
    if (schluessel[j] == '\0') { j = 0; }
    textneu[i] = ((schluessel[j] & 0x0F) ^ text[i]);
  }
  textneu[i]='\0';
  // Ausgeabe und dann Ende
  printf("verschluesselt: %s\n",textneu);
  system("PAUSE");   
  return 0;
}
und zwar hab ich bei folgendem probs:

Code:
for (i=0 , j = 0; text[i] != '\0' ; i++ , j++ )
was

2 variablen? und was heißt "\0"???

Code:
textneu[i] = ((schluessel[j] & 0x0F) ^ text[i]);
das versteh ich garnet...der rest iss mir eig. klar...wär nett wenn mir einer helfen könnte

Christian Seehase 15. Jul 2006 12:50

Re: Übersetzungsprobleme c -> delphi
 
Moin Hybrid,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Wenn ich mich nicht ganz irre, müsste die Schleife so aussehen:

Delphi-Quellcode:
i := 0;
j := 0;
while text[i] <> #00 do begin
  //.....
  inc(i);
  inc(j);
end;
Wie Du daraus schon ersehen kannst entspricht \0 in C dem #00 in Delphi.

Die fragliche Zeile müsste in Delphi so aussehen:

Delphi-Quellcode:
textneu[i] := char((ord(schluessel[j]) and $0F) xor ord(text[i]));

negaH 15. Jul 2006 13:08

Re: Übersetzungsprobleme c -> delphi
 
Delphi-Quellcode:
J := 0;
for I := 1 to Length(Text) do
begin
  Text[I] := Char(Ord(Text[I]) xor Ord(Schlüssel[J +1]));
  J := (J +1) mod Length(Schlüssel);
end;

// oder

J := 1;
for I := 1 to Length(Text) do
begin
  Text[I] := Char(Ord(Text[I]) xor Ord(Schlüssel[J]));
  Inc(J);
  if J > Length(Schlüssel) then J := 1;
end;

// oder

for I := 0 to Length(Text) -1 do
  Text[I +1] := Char(Ord(Text[I +1]) xor Ord(Schlüssel[I mod Length(Schlüssel) +1]));
Aber diese Art der Verschlüsselung ist eh sehr unsicher.
Obige Sourcen gehen davon aus das Text und Schlüssel LongStrings -> String Typen sind.

Gruß Hagen

Hybrid666 15. Jul 2006 13:12

Re: Übersetzungsprobleme c -> delphi
 
danke für die rasante antwort...also ich hab versucht mit deinen übersetzungen die function encrypt zu baun...sieht so aus:

Delphi-Quellcode:
function encrypt(text,schluessel: string): string;
var
  i,j: integer;
  textneu: string;
begin
  i := 1;
  j := 1;
  while text[i] <> #00 do
  begin
    if (schluessel[j] = #00) then j := 1;
    textneu[i] := char((ord(schluessel[j]) and $0F) xor ord(text[i]));
    inc(i);
    inc(j);
  end;
  result := textneu;
end;
das problem ist nur das ich an der stelle
Delphi-Quellcode:
textneu[i] := char((ord(schluessel[j]) and $0F) xor ord(text[i]));
eine access violation bekomme ohne spezifische fehlermeldung...was kann das sein?

MfG Hybrid666

Hybrid666 15. Jul 2006 13:14

Re: Übersetzungsprobleme c -> delphi
 
Zitat:

Zitat von negaH
Delphi-Quellcode:
J := 0;
for I := 1 to Length(Text) do
begin
  Text[I] := Char(Ord(Text[I]) xor Ord(Schlüssel[J +1]));
  J := (J +1) mod Length(Schlüssel);
end;

// oder

J := 1;
for I := 1 to Length(Text) do
begin
  Text[I] := Char(Ord(Text[I]) xor Ord(Schlüssel[J]));
  Inc(J);
  if J > Length(Schlüssel) then J := 1;
end;

// oder

for I := 0 to Length(Text) -1 do
  Text[I +1] := Char(Ord(Text[I +1]) xor Ord(Schlüssel[I mod Length(Schlüssel) +1]));
Aber diese Art der Verschlüsselung ist eh sehr unsicher.
Obige Sourcen gehen davon aus das Text und Schlüssel LongStrings -> String Typen sind.

Gruß Hagen

wow danke...das das unsicher ist ist in dem fall egal...

das soll nur in ne DLL rein...ich bin gamers.IRC coder und wir wollen die verkrüppelte $decode und $encode durch ne DLL ersetzen weil das $decode nicht alles wieder ins reine bringen kann was $encode ausspuckt (vor allem bei sehr langen texten) und ich schreib einfach ne DLL die die config file direkt schreibt sodass man nicht nur aus ner ini file was ins gIRC kopieren muss um das auth PW zu haben ^^ :P

MfG Hybrid666

Christian Seehase 15. Jul 2006 13:15

Re: Übersetzungsprobleme c -> delphi
 
Moin Hybrid,

Du hast vergessen textneu zu initialisieren.

Delphi-Quellcode:
  SetLength(textneu,length(text));

Hybrid666 15. Jul 2006 13:23

Re: Übersetzungsprobleme c -> delphi
 
@ negaH: keiner von den snippets returned irgendwas. trotzdem danke

@ Christian Seehase: jetzt gehts. VIELEN VIELEN DANK!
mein nächstes prob (ich hab sowas noch nie in delphi gamacht, das ganze $OF und so und #00 ist mir fremd): wie lasse ich das ganze rückwärts laufen? bitte nur vorgehensweiße, ich will das lernen und selber veruschen ;) also muss ich nur praktisch wissen was das
Delphi-Quellcode:
textneu[i] := char((ord(schluessel[j]) and $0F) xor ord(text[i]));
tut...

MfG Hybrid666

Klaus01 15. Jul 2006 13:32

Re: Übersetzungsprobleme c -> delphi
 
Delphi-Quellcode:
textneu[i] := char((ord(schluessel[j]) and $0F) xor ord(text[i]));
ord(schluessel[i]) ermittelt den Ascii Wert des Zeichens an der i'ten Stelle des Schlüssels
der Wert wird and mit Hex 0F verknüpft
- das Ergebnis daraus wird XOR mit dem Wert des Zeichens j des Textes verknüpft (ord(text[i]))

- aus diesem Ergebnis wird das Zeichen i des textneu ermittelt (char(..)).
char ist die Umkehrfunktion von ord.

Hoffe es ist einigermaßen verständlich.

Grüße
Klaus

Hybrid666 15. Jul 2006 13:37

Re: Übersetzungsprobleme c -> delphi
 
Zitat:

Zitat von Klaus01
Delphi-Quellcode:
textneu[i] := char((ord(schluessel[j]) and $0F) xor ord(text[i]));
ord(schluessel[i]) ermittelt den Ascii Wert des Zeichens an der i'ten Stelle des Schlüssels
der Wert wird and mit Hex 0F verknüpft
- das Ergebnis daraus wird XOR mit dem Wert des Zeichens j des Textes verknüpft (ord(text[i]))

- aus diesem Ergebnis wird das Zeichen i des textneu ermittelt (char(..)).
char ist die Umkehrfunktion von ord.

Hoffe es ist einigermaßen verständlich.

Grüße
Klaus

jo sehr verständlich, das einzige was mir unklar war war XOR und $0F...aber nu weiß ich ja was was ist...danke...aber eine frage hätte ich noch:was ist #00? ist #00 auch ein HEX wert? wenn ja warum fängt der eine mit $ an der andere mit #? ^^

ich muss ja praktisch dann weider so vorgehen...
i läuft den text durch (in dem fall den verschlpüsselten) und j den schlüssel...wenn j durch ist wieder auf 1 setzen iss klar...dann muss ich von dem schluessel an der stelle j $OF abziehen und mit xor dann den text an der stelle i nehmen...oder?

MfG Hybrid666

MfG Hybrid666

Klaus01 15. Jul 2006 13:41

Re: Übersetzungsprobleme c -> delphi
 
die Umkehrfunktion von XOR ist XOR
Wenn Du einen Wert mit XOR verknüpfst und das Ergebnis daraus wieder mit dem gleichen Wert
XOR verknüpfst wird daraus wieder der Ausgangswert.

$ kennzeichnet einen HexWert
# kennzeichnet eine Dezimalwert

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz