URL mit PHP verschlüsseln

Dörti.Hermi

Erfahrenes Mitglied
Hallo Leute!
Folgendes:
Wäre es nicht möglich, einen Link, der per GET-Methode an ein php-file weitergeleitet wird zu verschlüsseln? Habe ein simple Idee (weiß aber nicht, wie ich sie lösen soll): Den Link legt man Buchstabe für Buchstabe in ein Array. Nun wird mit dem Script das Array druchgegangen und jeder Buchstaben durch einen bekannten Buchstaben oder Zeichen ersetzt, also z.B. ein 'a' durch ein '%'. Dieser verschlüsselte Link wird dann an ein weiteres File weitergegeben, das diesen Algorithmus wieder umkehrt, sodass nur das file selber weiß, um welchen Link es sich tatsächlich handelt.
Nur mein Problem ist, wie splitte ich diesen Link auf?

Lg Andi
 
$_SERVER['QUERY_STRING']
Der Query-String, falls vorhanden, mit dem auf die Seite zugegriffen wurde.

Den decodierst du mit beliebiger funktion und erstellst per $$bla = $wert die Variablen wieder. Oder schreibst sie per $_GET[$bla] = $wert in das GET Array hinein.
 
Hallo engelb!
Dake für deine Antwort!

also mit
PHP:
$link = $_SERVER[QUERY_STRING]
wird die Adresse dann buchstabe für buchstabe in das Array $link gespeichert?

Tut mir leid, das ich's nicht gleich verstehe, bin aber noch Anfänger... :(

Lg
 
PHP:
$link = $_SERVER[QUERY_STRING];
Ist eine einfache Zuweisung. $link nimmt den Wert von $_SERVER['QUERY_STRING'] auf.

Um einen String in ein Array (of char) umzuwandelt, reicht die Funktion [phpf]str_split[/phpf], aber ich würde die Sache anders angehen. PHP gestattet die volle Manipulation eines Strings zur Laufzeit über geschweifte Klammern (statt eckiger Klammern, welche bei Arrays verwendet werden).
PHP:
<?php
$string = 'Hallo Welt';
echo $string{1}; // gibt "a" aus

Wie lässt sich das nun zur "Verschlüsselung verwenden? Ganz einfach:
PHP:
<?php
function encodeString($string, $offset)
{
    $strlen = strlen((string) $string);
    $cipher = '';

    // durchlaufe jedes einzelne Zeichen
    for ($i = 0; $i < $strlen; ++$i) {
        // berechne neuen ASCII-Wert durch verschiebung
        $char = ord($string{$i}) + $offset;
        // wenn $char größer als 255, dann rolle zurück
        if ($char > 255) {
            $char -= 255;
        } else if ($char < 0) {
            $char += 255;
        }
        // weise neuem String zu
        $cipher .= chr($char);
    }

    return $cipher;
}

function decodeString($string, $inset)
{
    $strlen = strlen((string) $string);
    $cipher = '';

    // durchlaufe jedes einzelne Zeichen
    for ($i = 0; $i < $strlen; ++$i) {
        // berechne neuen ASCII-Wert durch verschiebung
        $char = ord($string{$i}) - $inset;
        // wenn $char größer als 255, dann rolle zurück
        if ($char > 255) {
            $char -= 255;
        } else if ($char < 0) {
            $char += 255;
        }
        // weise neuem String zu
        $cipher .= chr($char);
    }

    return $cipher;
}

$string = $_SERVER['QUERY_STRING'];
$new = encodeString($string, 10);
echo "$new\n";
$old = decodeString($new, 10);
echo $old;

Ist nur ein billiges Beispiel, aber zeigt, wie man die {} einsetzen könnte.

Eine Bitte hätte ich an dich, Hermi... Bitte markiere die assoziativen Array-Indizies (Strings) durch doppelte oder einfache Anführungszeichen. Nicht-markierte Indizies werden zwar dennoch als solche erkannt, aber auch nur so lange, wie es keine solche Konstante gibt. Des Weiteren wirft es dir eventuell im Fall der Fälle nen Haufen Fehlermeldungen um den Kopf, wenn du zB den Server wechselst.
 
Danke für eure Antworten!
@MaeTimmae: Danke für den Hinweis mit den Anführungszeichen, ich hab sie nur hier vergessen, im code hab ich sie eh ;) ...
Ich hab die Verschlüsselung ganz primitiv gemacht, weil es nur darum geht, die URL anders darzustellen. Ich gehe einfach das array mit einer for()-schleife durch und ersetze mit einer switch-anweisung jeden buchstaben durch einen anderen bekannten. Dieser string wird dann als url einem file übergeben, welches die Verschlüsselung wieder umdrehen kann und das wars dann auch schon ;-) .

@Gumbo: Für meine Zwecke reicht meine primitive verschlüsselung völlig aus. Trotzdem Danke für deine Antwort!
 
Klingt aber nicht sehr performant... Da schreibst du dir lieber einen kleinen Algorithmus. Dauert zwar etwas länger zum entwickeln, schont dafür den Server.
 
Zurück