Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Anfänger braucht Hilfe, Java nach Delphi (https://www.delphipraxis.net/118310-anfaenger-braucht-hilfe-java-nach-delphi.html)

MrLolli 5. Aug 2008 02:51


Anfänger braucht Hilfe, Java nach Delphi
 
Hallo liebe Delphi-Praxis Mitglieder,

ich beschäftige mich seit einigen Wochen mit Delphi, und bräuchte Hilfe bei der Übersetzung eines kleinen Code-Schnippsels.

Zitat:

private int headerSize, keyIndex, prevEncrypted;
private byte[] sessionKey;

...

public void encryptHeader(byte[] packet)
{
for (int t = 0; t < headerSize; t++)
{
keyIndex %= sessionKey.length;
uint8 x = (packet[t] ^ sessionKey[keyIndex]) + prevEncrypted;
++keyIndex;
prevEncrypted = x;
packet[t] = x;
}
}
Was ich bisher habe:

Delphi-Quellcode:
procedure EncryptHeader(var packet, len: Integer);
var
  t, keyIndex, prevEncrypted: Integer;
  packetArray: Array of Byte;
begin
  SetLength(packetArray, len);
  move(packet, packetArray[1], len);

  for t := 1 to 4 do
  begin
    keyIndex := 40;
    x := (packetArray[t] ^ sessionkey[keyIndex]) + prevEncrypted;
    keyIndex := keyIndex + 1;

    prevEncrypted := x;
    packetArray[t] := x;
  end;
end;
headerSize ist grundsätzlich 4 und keyIndex 40 daher die feste Zuweisung.

Bei folgender Zeile komme ich nicht weiter, weil mir der Delphi Compiler meldet
[DCC Fehler] Unit1.pas(296): E2017 Zeigertyp erforderlich

Ich habe mich mit Zeigern bisher eigentlich gar nicht befasst, und wüsste nun nicht was ich hier ändern soll.

Delphi-Quellcode:
x := (packetArray[t] ^ sessionkey[keyIndex]) + prevEncrypted;
Ebenfalls könnte ich mir vorstellen das "keyIndex := 40" nicht ganz stimmt, da der Wert in Java mit "%=" statt mit "=" übergeben wird.

Habe nun schon Nächte gegrübelt, aber komme bei dieser einen Funktion nicht weiter.

Bitte habt etwas Erbarmen mit einen Delphi-Anfänger, habe gleich ein etwas umfangreicheres Projekt zum Lernen gestartet :drunken:

Grüße,
MrLolli

Relicted 5. Aug 2008 05:33

Re: Anfänger braucht Hilfe, Java nach Delphi
 
Erstmal willkommen in der DP!

Grundlegendes syntaktisches Problemchen :-)
Das % in Java steht wenn ich mich nicht irre für eine modulo-Operation. In delphi heißt das ganze schlicht und ergreifend "mod".
Gleiches gilt fürs ^ -> war glaube ich Xor oder? Dann versuch es einfach mal mit "xor" :-)

Hoffe das hilft weiter. Ich schau mir später den rest auch noch an muss nur jetzt erstmal richtung Arbeit :-)

Gruß
Reli

chaosben 5. Aug 2008 05:40

Re: Anfänger braucht Hilfe, Java nach Delphi
 
Hi und Willkommen in der DP! :hi:

Ich würde es so übersetzen: siehe nächster Post

Relicted 5. Aug 2008 06:41

Re: Anfänger braucht Hilfe, Java nach Delphi
 
Da das Hütchen (^) in Java XOR darstellt (zumindest das was ich via Google herausbekommen habe) würde ich eher sagen es heißt so:

ausserdem würde ich mich an den allgemeinen sprachgebrauch halten und die zählschleife "t" durch "i" ersetzen.
Weiterhin kann man sich die Hilfsvariable x sparen. Nicht empfehlenswert ist ausserdem das benutzen von prevEncrypted als Integer, wenn man eigentlich nur mit Bytewerten herumspielt. Daher würd ich das auch noch auf byte ändern.
Was noch zu überlegen wäre (je nach logik) ist ob die Variable prevEncrypted wirklich global gebraucht wird. Wenn nicht ab in die Funktion und initialisieren :-)

Delphi-Quellcode:
const
  headerSize = 4;
  keyIndex = 40;

var
  sessionKey = array of Byte;
  keyIndex : integer;
  prevEncrypted : byte;

type
  TPacket = array of Byte;

procedure encryptHeader(var packet : TPacket);
var
  i : Integer;
begin
  for i := 0 to headerSize - 1 do
  begin
    keyIndex := keyIndex mod Length(sessionKey);

    packet[i] := (packet[i] XOR sessionKey[keyIndex]) + prevEncrypted;
    prevEncrypted := packet[i];

    Inc(keyIndex);
  end;  
end;
Gruß
Reli

chaosben 5. Aug 2008 06:54

Re: Anfänger braucht Hilfe, Java nach Delphi
 
Zitat:

Zitat von Relicted
Was noch zu überlegen wäre (je nach logik) ist ob die Variable prevEncrypted wirklich global gebraucht wird. Wenn nicht ab in die Funktion und initialisieren :-)

Vermutlich ist das ganze sowieso eine Klasse und da sind es wahrscheinlich private Variablen der Klasse.

@Reli: Danke fürs nachbessern. :)

MrLolli 5. Aug 2008 13:22

Re: Anfänger braucht Hilfe, Java nach Delphi
 
Hallo,

danke für die Antworten und die tollen Erklärungen, habt mir sehr weiter geholfen :)
Werde nachher mal versuchen den Code so umzusetzen.


Grüße,
MrLolli


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:51 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