![]() |
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 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. |
Re: myCoder-Funktion aus der CodeLib in php
Ich habe jetzt nicht so ausführlich geschaut, aber einige Dinge fielen mir direkt auf.
Mit freundlichen Grüßen, Valle |
Re: myCoder-Funktion aus der CodeLib in php
Hi!
Wenn ich den Teil hier richtig sehe
Code:
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?!
if (($c>=32) AND ($c<=122)){
$c=$c+rand(0,90); if (($c<32) OR ($c>122)) $c=$c-($x*91); } Ciao, Frederic |
Re: myCoder-Funktion aus der CodeLib in php
Zitat:
Mit freundlichen Grüßen, Valle |
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. |
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:
Mit freundlichen Grüßen,
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; } Valle |
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:
Quelle:
Beispiel
<?php $zeichenkette = "mineralwasser"; echo substr ($zeichenkette,0,6)." "; echo substr ($zeichenkette,1,6)." "; echo substr ($zeichenkette,-3,2); ?> Ergebnis: minera ineral se ![]() Ciao, Frederic |
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. |
Re: myCoder-Funktion aus der CodeLib in php
Zitat:
Ü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:
Mit freundlichen Grüßen, Valle |
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üssel:[/b] '.$passwort.'</p>'; echo ' [b]verschlüsselt:[/b] '.$encoded.'</p>'; echo ' [b]Klartext, mit decode():[/b] '.$decoded.'</p>'; ?> |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 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