![]() |
Übersetzungsprobleme c -> delphi
Hi,
ich hab folgendes problem, ein kumpel hat mich gebeten einen code von ihm in delphi zu übersetzen... diesen hier:
Code:
und zwar hab ich bei folgendem probs:
#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; }
Code:
was
for (i=0 , j = 0; text[i] != '\0' ; i++ , j++ )
2 variablen? und was heißt "\0"???
Code:
das versteh ich garnet...der rest iss mir eig. klar...wär nett wenn mir einer helfen könnte
textneu[i] = ((schluessel[j] & 0x0F) ^ text[i]);
|
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:
Wie Du daraus schon ersehen kannst entspricht \0 in C dem #00 in Delphi.
i := 0;
j := 0; while text[i] <> #00 do begin //..... inc(i); inc(j); end; Die fragliche Zeile müsste in Delphi so aussehen:
Delphi-Quellcode:
textneu[i] := char((ord(schluessel[j]) and $0F) xor ord(text[i]));
|
Re: Übersetzungsprobleme c -> delphi
Delphi-Quellcode:
Aber diese Art der Verschlüsselung ist eh sehr unsicher.
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])); Obige Sourcen gehen davon aus das Text und Schlüssel LongStrings -> String Typen sind. Gruß Hagen |
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:
das problem ist nur das ich an der stelle
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;
Delphi-Quellcode:
eine access violation bekomme ohne spezifische fehlermeldung...was kann das sein?
textneu[i] := char((ord(schluessel[j]) and $0F) xor ord(text[i]));
MfG Hybrid666 |
Re: Übersetzungsprobleme c -> delphi
Zitat:
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 |
Re: Übersetzungsprobleme c -> delphi
Moin Hybrid,
Du hast vergessen textneu zu initialisieren.
Delphi-Quellcode:
SetLength(textneu,length(text));
|
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:
tut...
textneu[i] := char((ord(schluessel[j]) and $0F) xor ord(text[i]));
MfG Hybrid666 |
Re: Übersetzungsprobleme c -> delphi
Delphi-Quellcode:
ord(schluessel[i]) ermittelt den Ascii Wert des Zeichens an der i'ten Stelle des Schlüssels
textneu[i] := char((ord(schluessel[j]) and $0F) xor ord(text[i]));
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 |
Re: Übersetzungsprobleme c -> delphi
Zitat:
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 |
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. |
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