& (Delphi) Umschreiben einer Funktion
Andy A.
- recht
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
Die Überschrift sollte eignentlich (PHP) & (Delphi) heißen!
Andy
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
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ß...
Nachtrag
und / 65536 ist etwas anderes als mod 65536.
Grüße Oesi
Ich weiß, dass ich nichts weiß...
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