[openssl] Nach entschlüsseln Umlaute weg.
Chris_als_Gast
- sonstiges
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
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.
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
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
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.
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