Proste szyfrowanie tekstu

Legalnl

Użytkownik
Dołączył
Październik 8, 2008
Posty
828
Witam.
Jestem początkującym użytkownikiem jeżeli chodzi o PHP ( zaczynam:D ) i prosił bym o pomoc lub ew poprawki. Kiedyś napisałem kod w Delphi do szyfrowania tekstu.
Kod:
function tform1.szyfruj(s:string) : string;
var
  nr, key : integer;
  zn : char;
  tekst, wynik : string;
begin
  tekst := edit1.Text;
  key := 2;
  for nr := 0 to length(tekst) do
   begin
     zn := tekst[ nr ];
     wynik := wynik + chr( ord( zn ) xor ord( key ) );
   end;
 result := wynik;
end;

Przetłumaczyłem go do PHP:

PHP:
<?PHP
$tekst = 'legalnl'; 
$key = 3;
$nr = 0;
$zn = ' ';
$wynik = ' ';
	
for( $nr = 1; $nr <= strlen($tekst); $nr++ ) 
{
   $zn = $tekst[$nr];
   $wynik = $wynik.chr(ord($zn) xor ord($key));
}
		
echo 'test';
echo $wynik;

?>

Tylko ze to mi nie działa. skrypt nie zwraca wartości zmiennej. podejrzewam ze jest pusta.

//PS: czy w php trzeba deklarować zmienne na początku??
czy wcale nie musiałem na gorze pisać np $zn = ' '; ??

POZDRO!
 
Ostatnia edycja:

hxv

Były Moderator
Dołączył
Sierpień 9, 2006
Posty
797
Nie trzeba w żaden sposób deklarować zmiennych, zostają one utworzone przy pierwszym użyciu. Jeśli już musisz to robić, to deklaruj je jako puste ciągi, tutaj będziesz doklejał kolejne znaki do spacji, chyba nie tak to powinno wyglądać?
Tablice numeruje się od zera więc w pętli powinno być $nr=0.
W PHP "xor" to logiczne xor, bitowe xor to "^", więc powinno to wyglądać jakoś tak:
PHP:
$wynik .= chr( ord( $zn ) ^ ord( $key ) );
 

Legalnl

Użytkownik
Dołączył
Październik 8, 2008
Posty
828
dzięki :) teraz juz coś wyświetla :D tylko ze problem w tym ze jeżeli szyfruje go key = 3 w php, to chcąc to odszyfrować kodem w Delphi to nie odszyfruje się poprawnie, tzn wychodzi co innego niż powinno :( Kod w php poprawiłęm na taki:

PHP:
<?PHP
    $tekst = 'legalnl'; 
    $key = 2;
	
           for( $nr = 0   ;   $nr <= strlen($tekst)   ;   $nr++ ) 
           {
             $zn = $tekst[$nr];
             $efekt .= chr( ord( $zn ) ^ ord( $key ) ); 

           }
		
		echo "$efekt";
?>
 

hxv

Były Moderator
Dołączył
Sierpień 9, 2006
Posty
797
Zdaje się, że funkcja ord w Delphi i PHP działa trochę inaczej. W Delphi ord( integer ) zwraca po prostu podaną liczbę (tak przynajmniej wynika z tego, co udało mi się znaleźć), w PHP nawet jeśli podamy liczbę zostanie ona potraktowana jako string więc ord( 2 ) zwróci 0x32 (kod ascii znaku "2"). Zmień ord( $key ) na samo $key i chyba będzie działać jak należy.
 

Legalnl

Użytkownik
Dołączył
Październik 8, 2008
Posty
828
tak, masz racje ;) Dzieki wielkie :) rzeczywiście te ord dziala inaczej w php i w delphi. teraz wszystko dziala jak nalezy ;) Dzieki
 
Do góry Bottom