Jun 02

Heute stand ich mit einem Kollegen vor einem Rätsel. Zur Implementierung eines Webservices, sollte der Anfrage ein MD5-Hash mitgeschickt werden und Perl und Java lieferten ein anderes Ergebnis als PHP?!?

Der Input-String: 0815658620090602%§Hjk25Tlu9v
Die Ergebnisse:
PHP: bfea1d1f6015503226064dca7fa7d6af
Java: 30588faeab54f18136bb8f0e47285984
Perl: 30588faeab54f18136bb8f0e47285984

Auf des Rätsels-Lösung kamen wir durch Zufall von selbst, nachdem Google leider keine Hilfe war, bzw. wir ja auch nicht wußten wonach wir genau suchen sollten.
PHP verwendet den ISO-8859-1(5) Zeichensatz, jedoch Java und Perl den UTF-8 Zeichensatz!
Der Übeltäter ist das §-Zeichen, welches den MD5-Hash in verschiedenen Zeichensätzen zu unterschiedlichen Ergebnissen führt! Sprich, den Input-String in Perl mit

my $cd = Locale::Recode->new
(from => 'UTF-8', to => 'ISO-8859-1');
$cd->recode($Input-String)

umwandeln und schon kommt auch in Perl das gleiche Ergebnis wie in PHP raus!

Also immer den Zeichensatz beachten, mit welchem der MD5-Hash erzeugt wird!

Leave a Reply

preload preload preload