Andy A.: & (Delphi) Umschreiben einer Funktion

Hi,

ich habe diese delphi-Funktion:

// --------------------------------------------------------
Function Encryp(Const S: String; Key: Word; rueckw: Boolean): String;
Var
  I: byte;
  oben, unten: byte;
Begin

Setlength(Result, length(S));
  If Rueckw Then Begin
    For I := Length(S) Downto 1 Do Begin
      Result[I] := char(byte(S[I]) Xor (Key Shr 8));
      Key := (byte(Result[I]) + Key) * C1 + C2;
    End;
  End
  Else Begin
    For I := 1 To Length(S) Do Begin
      Result[I] := char(byte(S[I]) Xor (Key Shr 8));
      Key := (byte(Result[I]) + Key) * C1 + C2;
    End;
  End;

Encryp := result;
End;
// ---------------------------------------------------------

Nun will ich die aus PHP umschreiben. Hier mal ein Versuch:

<!-- ----------------------------- -->
<textarea rows="27" name="S1" cols="70"><?php
$c1=41088;
$c2=88104;

Function encryp($s,$key,$rueckw){
    global $c1,$c2;
  if ($rueckw) {
    For ($i=0;$i<=strlen($s)-1; $i++){

$result.=chr(substr($s,$i,1) ^ ($key >> 8) & 0xff);
      $key = ((ord(substr($result,-1))+$key)*$c1 + $c2) & 0xffff;
       echo  "$key ".($key >> 8)."\n";
    }
  } else {
      For ($i=strlen($s)-1;$i>=0; $i--){
      $result.=chr(ord(substr($s,$i,1) ^ ($key >> 8)));
      $key = (ord(substr($result,-1))+$key)*$c1 + $c2;
    }
}
  return $result;}

$s="testte";
$s1=encryp($s,815,1);
$result=bin2hex($s1);

echo "$s1
$result\n";
$s1= pack("H" . strlen($result),$result);
$result=encryp($s1,815,1);
echo "\n$result";

?></textarea>
<!-- -------------------------------------- -->

Was ist bei der PHP-Funktion falsch?

Andy

  1. Die Überschrift sollte eignentlich (PHP) & (Delphi) heißen!

    Andy

  2. Halihallo Andy A.

    ich habe diese delphi-Funktion:
    [...]
    Nun will ich die aus PHP umschreiben. Hier mal ein Versuch:
    [..]
    Was ist bei der PHP-Funktion falsch?

    Warum sagst du es uns nicht? - Zumindest eine Fehlerbeschreibung
    hätte ich erwartet, oder ein Beispiel wie es sein sollte und wie es
    ist.

    Ein kleiner Tipp: Da ich zumindest jetzt nicht die ganze Funktion
    durchsehen werde und jede einzelne Umsetzung überprüfe:

    Versuche nicht alles auf einmal zu machen, sondern nimm dir eine
    Zeile von Delphi, übersetze sie in PHP und überprüfe die Ergebnisse
    dieser einen Zeile in den beiden Programmiersprachen.

    Nun, für mich sieht es jedoch schon sehr gut aus. Es dürte sich um
    eine verheerende Kleinigkeit handeln, wie immer beim Programmieren ;)

    Viele Grüsse

    Philipp

    --
    If a project is completed on schedule, it wasn't debugged properly.
  3. Hi,

    hi Andy,

    kann es sein dass Du i++ mit i-- vertauscht hast. Für mich klingt downto nach i--.

    Grüße Oesi
    Ich weiß, dass ich nichts weiß...

    1. Nachtrag

      und / 65536 ist etwas anderes als mod 65536.

      Grüße Oesi
      Ich weiß, dass ich nichts weiß...

    2. Halihallo oesi50

      kann es sein dass Du i++ mit i-- vertauscht hast. Für mich klingt downto nach i--.

      Ja, die beiden for-Schleifen sind in ihrer Richtung jeweils
      vertauscht. Aber wo Andy durch 65536 teilt ist mir unsichtbar. Er
      hat ein "& 0xffff" stehen, was " MOD 65536" gleichkommt, das ist
      schon richtig, oder was meinst du?

      Viele Grüsse

      Philipp

      --
      If a project is completed on schedule, it wasn't debugged properly.