Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   myCoder-Funktion aus der CodeLib in php (https://www.delphipraxis.net/130122-mycoder-funktion-aus-der-codelib-php.html)

Logic2 3. Mär 2009 19:59


myCoder-Funktion aus der CodeLib in php
 
Hallo,

ich habe versucht die recht einfache Verschlüsselung von MaBuSE in php umzusetzen.
Ist mir aber scheinbar nicht so gelungen.

Hier nochmal der Link zur Originalfunktion in CodeLib.

Hier mein php Code:


Code:
   function myCoder ($s, $password, $decode){      
      if ($decode==true) $x=-1; else $x=1;
      srand($password);
      $result='';
      for($i = 1; $i < strlen($s)+1; $i++){
         $c=ord($s{$i});
         
         if (($c>=32) AND ($c<=122)){
            $c=$c+rand(0,90);            
            if (($c<32) OR ($c>122))
               $c=$c-($x*91);         
         }      
         $result.=chr($c);
      }      
      return $result;
   }
   
   echo myCoder('jS#)P',1,true);

Also als Ergebnis sollte 'hallo' herauskommen, stattdessen bekomme ich: �Fp��



'hallo' habe ich mir von der Delphi funktion mit dem "Passwort" 1 verschlüsseln lassen -> jS#)P

Wäre offen für ein bißchen Input.

Valle 3. Mär 2009 20:06

Re: myCoder-Funktion aus der CodeLib in php
 
Ich habe jetzt nicht so ausführlich geschaut, aber einige Dinge fielen mir direkt auf.
  • In PHP beginnt ein String bei 0
  • Auch in PHP prüft man nicht auf true, so wie es in MaBuSEs Code auch richtig ist
  • Was ist das für Ein Konstrukt: $s{$i} ?

Mit freundlichen Grüßen,

Valle

fkerber 3. Mär 2009 20:08

Re: myCoder-Funktion aus der CodeLib in php
 
Hi!

Wenn ich den Teil hier richtig sehe

Code:
if (($c>=32) AND ($c<=122)){
            $c=$c+rand(0,90);          
            if (($c<32) OR ($c>122))
               $c=$c-($x*91);        
         }
dann sieht er nicht so aus, wie der in der Codelib. Im ersten Fall scheint das x zu fehlen, im zweiten steht was von 91 statt 90?!


Ciao, Frederic

Valle 3. Mär 2009 20:16

Re: myCoder-Funktion aus der CodeLib in php
 
Zitat:

Zitat von fkerber
dann sieht er nicht so aus, wie der in der Codelib. Im ersten Fall scheint das x zu fehlen, im zweiten steht was von 91 statt 90?!

Lies mal MaBuSEs verlinkten Post. ;-)

Mit freundlichen Grüßen,

Valle

Logic2 3. Mär 2009 20:20

Re: myCoder-Funktion aus der CodeLib in php
 
Ja das mit der 91 hatte ich auch erst überlesen.

@ Valle:

Sicher, dass der String bei 0 beginnt?

Wenn man z.b. die Funktion strpos nimmt, die liefert als Rückgabewert, sollte die Suchstring nicht gefunden werden, false.
Welches auch als 0 interpretiert werden kann (siehe Doku). Wie kann man dann unterscheiden, ob der Suchstring ab der ersten Stelle beginnt (also laut dir 0) oder gar nicht vorkommt?
Also laut Doku gibt strpos auch einen Boolean Wert zurück, wie kann das sein, sollte es keine boolean geben?

das {} gibt den char an der Stelle des Strings zurück, analog zum Delphi []

teste mal:

$hallo='test';
echo $hallo{1};

liefert als Ergebnis t, auch ein Indiz dafür, dass Strings auch mit 1 anfange. Außer dies ist alles eine Ausnahme.

Kann auch sein, dass ich das alles falsch sehe ;) Hab mir ja alles per Learning by doing beigebracht.

Valle 3. Mär 2009 20:26

Re: myCoder-Funktion aus der CodeLib in php
 
Ja, ich bin mir ganz hundert-prozentig sicher, dass der String bei 0 beginnt. Von dem {}-Syntax habe ich noch nie was gehört, trotz jahrelangem PHP. Ich benutze dafür normalerweise substr oder einfach den gleichen Syntax wie in Delphi: $s[$i] oder substr($s, $i, 1);

Den Fehler habe ich jetzt übrigens gefunden. Das Problem ist, dass der PHP-Zufallszahlen-Generator ein anderer ist, wie der von Delphi. Das heißt, dass es sehr schwierig werden könnte, diesen Algorithmus zu übersetzen. Hier hast du trotzdem noch meine Version:

Code:
function myCoder($s, $password, $decode)
{     
  $x = ($decode) ? -1 : 1;
  mt_srand($password); # oder srand()
  $result = '';
  for($i = 0; $i < strlen($s); $i++) {
    $c = ord($s[$i]);
    if (($c >= 32) && ($c <= 122)) {
      $c = $c + ($x * mt_rand(0, 90)); # oder rand()
      if (($c < 32) || ($c > 122))
        $c = $c - ($x*91);
    }
    $result .= chr($c);
  }     
  return $result;
}
Mit freundlichen Grüßen,

Valle

fkerber 3. Mär 2009 20:31

Re: myCoder-Funktion aus der CodeLib in php
 
Hi!

Ach scrollen, um alles zu lesen ist uncool :mrgreen:
Sorry..

Ich würde aber auch sagen, dass in PHP Strings 0-basiert sind:

Code:
Beispiel

<?php

$zeichenkette = "mineralwasser";

echo substr ($zeichenkette,0,6)."
";

echo substr ($zeichenkette,1,6)."
";

echo substr ($zeichenkette,-3,2);

?>
Ergebnis:

minera
ineral
se
Quelle: http://www.phpbox.de/php_befehle/substr.php



Ciao, Frederic

Logic2 3. Mär 2009 20:32

Re: myCoder-Funktion aus der CodeLib in php
 
dann sag ich mal danke - immerhin hab ich jetzt nen bisl neues zur Syntax gelernt ;)
Dann ist {} eben bisl komisch ;)

Dass php nen anderen Zufallsgenerator hat, habe ich gar nicht bedacht mhh kennst du vll. eine ähnliche Funktion, die ich benutzen kann ohne blowfish module in Delphi zu integrieren.

Also ich möchte strings, die man Delphi-Programm erzeugt per POST oder GET an den script übergeben, aber hätte ungerne, dass man es lesen kann. Es sollte aber immerhin mehr als nur base64 oder so sein.

Valle 3. Mär 2009 20:34

Re: myCoder-Funktion aus der CodeLib in php
 
Zitat:

Zitat von fkerber
Ach scrollen, um alles zu lesen ist uncool :mrgreen:
Sorry..

Ich hatte es auch schon oben in der Liste stehen. :mrgreen:

Übrigens, ich habe gerade das mit dem {}-Syntax getestet. Und der Code funktioniert tatsächlich. Wusste echt nicht, dass es noch grammatikalische Sinnlosigkeiten in PHP gibt, die ich noch nicht kenne. *g* Ich bleib trotzdem bei substr oder []. :)

Zitat:

Zitat von Logic2
Dass php nen anderen Zufallsgenerator hat, habe ich gar nicht bedacht mhh kennst du vll. eine ähnliche Funktion, die ich benutzen kann ohne blowfish module in Delphi zu integrieren.

Also ich möchte strings, die man Delphi-Programm erzeugt per POST oder GET an den script übergeben, aber hätte ungerne, dass man es lesen kann. Es sollte aber immerhin mehr als nur base64 oder so sein.

Nimm einfach einen anderen einfachen Algorithmus, der nicht auf den Zufallszahlengenerator basiert. Den Generator von Delphi nachzumachen würde ich als viel zu komplex einschätzen. Wie wäre es mit XOR? Letztlich ist es eigentlich egal, denn unsicher ist es in jedem Fall.

Mit freundlichen Grüßen,

Valle

Logic2 3. Mär 2009 20:43

Re: myCoder-Funktion aus der CodeLib in php
 
Hab jetzt einfach mal gegoogelt.
Verstehe bei der unteren Funktion eigentlich alles bis auf das ^- Zeichen, ist das sowas wie power?

Wie einfach ist die denn zu entschlüsseln?

Code:
<?php
$klartext = "Dies ist der Klartext";

$passwort = "passwort";


function encode($key, $text)
{
    $l_k = strlen($key);
    $l_t = strlen($text);
   
    if($l_k == 0) return $text; // Ohne Key keine Verschlüsselung!!!
   
    $encoded = "";
    $k = 0; // Position im Key
    for($i=0; $i<$l_t; $i++)
    {
        if($k > $l_k) $k = 0; // Wenn ende des keys, dann wieder von vorne
        $encoded .= chr(ord($text[$i]) ^ ord($key[$k])); // Verschlüsselung
        $k++;
    }
    return $encoded;
}

function decode($key, $chiffre)
{
    $l_k = strlen($key);
    $l_t = strlen($chiffre);
   
    if($l_k == 0) return $text; // Ohne Key keine Verschlüsselung!!!
   
    $decoded = "";
   
    $k = 0; // Position im Key
    for($i=0; $i<$l_t; $i++)
    {
        if($k > $l_k) $k = 0; // Wenn ende des keys, dann wieder von vorne
        $decoded .= chr(ord($chiffre[$i]) ^ ord($key[$k])); // Verschlüsselung
        $k++;
    }
   
    return $decoded;
}

$encoded = encode($passwort, $klartext);
$decoded = decode($passwort, $encoded);

echo '

[b]Klartext:[/b] '.$klartext.'</p>';
echo '

[b]Schl&uuml;ssel:[/b] '.$passwort.'</p>';
echo '

[b]verschl&uuml;sselt:[/b] '.$encoded.'</p>';
echo '

[b]Klartext, mit decode():[/b] '.$decoded.'</p>';
?>


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 Uhr.
Seite 1 von 2  1 2      

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