PHP: stringEncodeOrDecode()

edit | delete

Autor: Ralf v.d.Mark

eingetragen: Freitag, 02. Januar 2026 um 18:09 Uhr (1/2026 Kalenderwoche)

geändert: Freitag, 02. Januar 2026 um 18:09 Uhr (1/2026 Kalenderwoche)

Keywords: string Encode Decode Verschleiert

Kategorien: PHP,

Text:

Verschleiert einen STING, um ihn an eine URL anzuhängen.
Achtung: Diese Funktion muss mit der aufrufenden identisch sein!

Quellcode:  

/**
 * Soll einen STING verschleiern und an eine Url hängen können.
 * Achtung: Diese Funktion muss mit der aufrufenden identisch sein!
 *
 * @param   string (Zeichenkette die ver- oder entschleiert werden soll)
 * @param   bool   (true = codieren, false = decodieren)
 *
 * @return  string (fertig behandelte Zeichenkette) * */
function stringEncodeOrDecode($string, $encode = true)
{
    if (empty($string)) {
        return null;
    }

    // WICHTIG: Nutze einen festen Schlüssel aus deiner config.php
    $geheimnis = "DEIN_SUPER_GEHEIMER_SCHLUESSEL_123456!";
    $methode = "aes-256-ctr";

    if ($encode === true) {
        $string = strip_tags($string);
        $ivLaenge = openssl_cipher_iv_length($methode);
        $iv = openssl_random_pseudo_bytes($ivLaenge);

        $verschluesselt = openssl_encrypt($string, $methode, $geheimnis, 0, $iv);

        // Wir nutzen base64, ersetzen aber nur die URL-kritischen Zeichen + und /
        // Das = am Ende lassen wir stehen oder behandeln es sauber.
        $base64 = base64_encode($iv . $verschluesselt);
        return str_replace(['+', '/', '='], ['-', '_', ''], $base64);
    } else {
        // Beim Dekodieren müssen wir die Zeichen zurücktauschen
        $suche = ['-', '_'];
        $ersetze = ['+', '/'];
        $relativSichererString = str_replace($suche, $ersetze, $string);

        // Base64 Padding korrigieren, falls = entfernt wurden
        $nachfuellen = strlen($relativSichererString) % 4;
        if ($nachfuellen) {
            $relativSichererString .= str_repeat('=', 4 - $nachfuellen);
        }

        $data = base64_decode($relativSichererString);
        if ($data === false) return null;

        $ivLaenge = openssl_cipher_iv_length($methode);
        $iv = substr($data, 0, $ivLaenge);
        $verschluesselterText = substr($data, $ivLaenge);

        $entschluesselt = openssl_decrypt($verschluesselterText, $methode, $geheimnis, 0, $iv);
        return $entschluesselt ?: null;
    }
}//ENDE: function stringEncodeOrDecode(...)