String auf Base64 prüfen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • String auf Base64 prüfen

    Hallo,

    gibt es eine Möglichkeit sicher zu prüfen ob ein String in einer Variable mit Base64 kodiert wurde, oder nicht?

    Danke

  • #2
    Nein!
    Du kannst bestenfalls prüfen, ob ungültige Zeichen drin sind.
    Wir werden alle sterben

    Kommentar


    • #3
      Zitat von TriphunEM Beitrag anzeigen
      ... gibt es eine Möglichkeit sicher zu prüfen ob ein String in einer Variable mit Base64 kodiert wurde, oder nicht?
      PHP-Code:
      is_string(base64_decode($string)) 
      Funktioniert aber nicht mit der "URL and Filename Safe Alphabet"-Variante.
      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

      Kommentar


      • #4
        100% geht das nicht, aber so wäre es möglich zu testen:
        PHP-Code:
        $str 'RGllcyBpc3QgZWluIHp1IGtvZGllcmVuZGVyIFN0cmluZw==';
        if(
        $str===base64_encode(@base64_decode($str)))
        {
            echo 
        'Ja! Das ist warscheinlich base64  string';

        Es besteht immer noch eine Wahrscheinlichkeit, das es sich nicht um base64 handelt. (vieleich ist das einfach mein passwort, oder andere Buchstabenkombination, die ich eben erfunden habe ?)

        @fireweasel
        base64_decode liefert erst dann false, wenn die zeichen nicht zu base64 alphabet passen. das ist aber nicht ausreichend um zu sagen , dass ein String base64 codiert ist.
        beispiel:
        PHP-Code:
        //ein zeichen von oberem string abgeschnitten.
        $geaendert='RGllcyBpc3QgZWluIHp1IGtvZGllcmVuZGVyIFN0cmluZw=';
        if(
        is_string(base64_decode($geaendert)))echo 'Ja das ist string, ABER!!!!';
        if(
        $geaendert===base64_encode(base64_decode($geaendert)))
        {
            echo 
        'Ja warscheinlich Base64';

        else
        {
            echo 
        'nicht Base64';

        Slava
        bituniverse.com

        Kommentar


        • #5
          Zitat von Slava Beitrag anzeigen
          @fireweasel
          base64_decode liefert erst dann false, wenn die zeichen nicht zu base64 alphabet passen. das ist aber nicht ausreichend um zu sagen , dass ein String base64 codiert ist. ...
          Ja, ich hab mich einfach aufs PHP-Handbuch verlassen, bzw. es so interpretiert, dass base64_decode() wirklich FALSE liefert, falls der übergebene String unpassende Zeichen enthält. Anscheinend kann man aber der Funktion alles Mögliche übergeben, ohne dass sie jemals mit FALSE antwortet (was auch ein Blick in den Quältext zeigt). Das ist kein Wunder, wenn man bedenkt, dass base64_decode() auch Zeilenumbrüche und ähnlichen Kleinkram beim Dekodieren ignorieren soll. Zur "Syntax"-Prüfung ist sie also ungeeignet.

          Daher jetzt die von mir ursprünglich angedachte Variante:

          PHP-Code:
          // checks if $string is base64-encoded
          // returns TRUE|FALSE
          function is_base64(
              
          $string NULL
          ) {
              if (!
          is_string($string) || !isset($string[3])) {
                  return 
          FALSE;
              }
              return (bool) 
          preg_match(
                  
          '/\A
                  (?:\s*([a-zA-Z0-9\/+]{4})+)* # multiple lines
                  \s*

                  (?:[a-zA-Z0-9\/+]{4})*                      # single|last line
                  (?:[a-zA-Z0-9\/+]{3}=|[a-zA-Z0-9\/+]{2}==)? # single|last line trailing bytes

                  \s*

                  \z/sx'
          ,
                  
          $string
              
          );

          Den regulären Ausdruck kann man noch vereinfachen, indem man Subroutinen benutzt.
          Aus Faulheit überlasse ich dies dem Betrachter als Übungsaufgabe. ;-)


          Zitat von Slava Beitrag anzeigen
          100% geht das nicht, aber so wäre es möglich zu testen:
          PHP-Code:
          $str 'RGllcyBpc3QgZWluIHp1IGtvZGllcmVuZGVyIFN0cmluZw==';
          if(
          $str===base64_encode(@base64_decode($str)))
          {
              echo 
          'Ja! Das ist warscheinlich base64  string';

          Es besteht immer noch eine Wahrscheinlichkeit, das es sich nicht um base64 handelt. (vieleich ist das einfach mein passwort, oder andere Buchstabenkombination, die ich eben erfunden habe ?)
          Who cares?

          Es sieht aus wie base64, läuft wie base64, quakt wie base64 -- also ist es base64.

          Schließlich hat niemand verlangt, dass nach dem Dekodieren was Brauchbares herauskommen soll. ;-)
          Zuletzt geändert von fireweasel; 03.09.2009, 20:12.
          Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

          Kommentar

          Lädt...
          X