Chris_als_Gast: [openssl] Nach entschlüsseln Umlaute weg.

Hallo Forum,

ich stehe erneut vor einem Problem, bei dem ich nicht weiterkomme. Vielleicht kann mir jemand von Euch einen weiteren Tipp geben.

Ich lasse auf meinem (Web)Server mithilfe von PHP eine verschlüsselte Text-Datei erzeugen, die sofort zum Download bereit steht:

  
function download($data="AäOöUüsß") {  
  $password="ganz_furchtbar_geheimes_passwort";  
  header('Content-Type: text/plain; charset=iso-8859-1');  
  header('Content-Transfer-Encoding: quoted-printable');  
  header('Last-Modified: '.date('D, d M Y H:i:s T'));  
  header('Expires: 0');  
  header('Pragma: no-cache');  
  header('Cache-Control: private, no-store, no-cache, must-revalidate, max-age=0');  
  header('Cache-Control: post-check=0, pre-check=0', false);  
  header('Content-Disposition: attachment; filename="verschlDatei.enc"');  
  $sys = 'echo ' . escapeshellarg($data) . ' | openssl enc -aes-256-cbc -a -salt -pass pass:' . escapeshellarg($password);  
  system($sys);  
  exit;  
} // end function  

Klappt alles wunderbar, Datei wird heruntergeladen und Inhalt ist verschlüsselt.
Datei "verschlDatei.enc": ~~~php

U2FsdGVkX1+kj/UQtqf1zsuvBpMgPaQR9DieDKPFNTFLIM5r88AL6M9DoUv/b0JE
<..cut..>
njovSZyeagHqsCJsuwfnlmKyft0S5AtlZdCFNv/EABM=

  
Nun wird die verschlüsselte Datei auf dem Zielrechner (Win7) per Batch entschlüsselt:  
~~~php
  
openssl enc -d -aes-256-cbc -a -salt -pass pass:ganz_furchtbar_geheimes_passwort -in verschlDatei.enc > entschlDatei.csv  

Klappt auch wunderbar, bis auf die Tatsache, dass plötzlich ALLE Deutschen Umlaute verschwunden sind:
Inhalt "entschlDatei.csv": ~~~php

AOUs

  
Tests haben ergeben, dass die Header aus der Funktion download() korrekt sind, denn nach dem Download der unverschlüsselten Daten sind alle Umlaute vorhanden.  
Es muss also irgendwie an openssl liegen, dass die Umlaute entweder beim VERschlüsseln oder nach dem ENTschlüsseln abhanden kommen.  
  
Kennt jemand ein ähnlichen Fall und kann mir evtl. helfen?  
  
Besten Dank im Voraus.  
VG Chris  

  1. Tach!

    Es muss also irgendwie an openssl liegen, dass die Umlaute entweder beim VERschlüsseln oder nach dem ENTschlüsseln abhanden kommen.

    Vielleicht werden sie auch nur nicht von der Shell richtig erkannt/angezeigt. Ein Hexdump der Datei sollte Aufschluss geben, was wirklich enthalten ist.

    dedlfix.

    1. Hallo delfix,

      Vielleicht werden sie auch nur nicht von der Shell richtig erkannt/angezeigt. Ein Hexdump der Datei sollte Aufschluss geben, was wirklich enthalten ist.

      Super! Danke für den Hinweis, obwohl: Hexdump einer ASCII-Datei wird schwierig ;))
      Dennoch hast du mich auf die richtige Fährte geführt und ich konnte den Übeltäter ermitteln:

      Test 1:

        
      $data = "AäOöUüSß";  
      $sys = 'echo ' . escapeshellarg($data);  
      
      

      Ausgabe: AOUS

      Test 2:

        
      $data = "AäOöUüSß";  
      $sys = 'echo ' . $data;  
      
      

      Ausgabe: AäOöUüSß

      Hammer! escapeshellarg() beißt die Umlaute weg und nirgendwo steht es geschrieben. Ob das wohl ein Bug ist? Und wie sichere ich nun die Shell gegen böse Usereingaben ab? Aber das sind andere Themen.

      Jedenfalls vielen Dank für Deinen Hinweis! :)

      VG
      Chris

      1. Lesen hilft ab und zu:

          
        When escapeshellarg() was stripping my non-ASCII characters from a UTF-8 string, adding the following fixed the problem:  
          
        <?php  
        setlocale(LC_CTYPE, "en_US.UTF-8");  
        ?>  
        
        

        Mit der entsprechenden Anpassung klappts jetzt auch bei mir. :D

        VG
        Chris

      2. Tach!

        Ein Hexdump der Datei sollte Aufschluss geben, was wirklich enthalten ist.
        Super! Danke für den Hinweis, obwohl: Hexdump einer ASCII-Datei wird schwierig ;))

        In einer ASCII-Datei sind auch nur Bytes gespeichert, die man sich mit einem Hexdump problemlos anzeigen lassen kann. Es gibt keinen Dateiinhalt, den ein Hexdump nicht darzustellen vermag.

        dedlfix.

      3. Hi,

        Super! Danke für den Hinweis, obwohl: Hexdump einer ASCII-Datei wird schwierig ;))

        Wieso sollte das schwierig sein?

        Ganz andere Frage:
        Warum geht es denn jetzt plötzlich um eine ASCII-Datei? Bisher ging es doch um eine Datei, die Umlaute enthalten soll ...

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.