Christoph Zurnieden: Java nach PHP

Beitrag lesen

Hi,

Das kann nicht sein, dass das in PHP überflüssig ist. Wenn ich mit PHP einen String in den SHA-Hash wandle, kommt nämlich was anderes raus, als wenn das diese Java-Methode macht.

Dann ist einer der beiden Funktionen kaput.
Tip: die von PHP ist i.O.

Wenn ich es jetzt richtig verstanden habe, arbeitet der SHA Algorithmus nämlich nicht mit den einzelnen char sondern mit deren byte-Pendant.

Das weist Du nicht, da er Dir nicht vorliegt.
Es ist aber anzunehmen, das die SHA Funktion mit LittleEndian, 2er-Komplement Integern arbeitet und die Bits in Stuecken zu CHAR_BIT (fuer gewoehnlich 8) Bits frisst.

Wie gross ist eigentlich "md5bytes"?
Wenn ich jetzt alles (alle Hilfen und Infos aus allen Antworten -> hier ein kurzes aber großes "Zwischendanke" an alle) richtig Ordnen kann ist md5bytes.length die Länge des übergebenen Strings, nur beinhaltet das Array nicht die char sondern entsprechende bytes (-> siehe Debuginfo von Mario).

Nein, da ist der Digest drin, also der Hash.

Ein String _ist_ eine Abfolge von Bytes.

Ja. Nur wird es wahrscheinlich einen Unterschied machen, ob der Algorithmus nun "1" oder das "byte-Pendant "49"" ???

Nein, das ist nicht das Problem. Aber das input.getBytes ist tatsaechlich eines.

Koenntest Du eigentlich mal die eine oder andere Probe hierhinposten?

Kommt noch, mach mich jetzt mal an ein paar Versuche was zu implementieren.

Was bitte hinderte Dich hier ein paar Vergleichshashes zu posten?
Input: "blabla ..."
PHP:   deadbeef...
Java: *badbeef0...

Oder noch besser in Deinen Orginalthread?
Ich denke hier wird es dann besser aufgehoben sein.

Eigentlich nicht, aber wen Du das moechtest ...

Ich habe da so meine Vermutungen, was genau schiefgelaufen sein koennte.

Das, was ich oben versucht habe, zu beschreiben ?
Oder hättest Du eine ganz andere Vermutung?

Wie die Kollegen schon bestaetigten liegt's am Input. Du hast bei PHP einen anderen Input als bei Java. Ganz genau scheint es wohl zu sein, das Du PHP mit latin1(? aber zumindest keinen Unicode) fuetterst und Java bekommt Unicode.
Um das zu verifizieren waeren eben die Vergleichshashes nett gewesen, um die ich bat. Immerhin haette es ja noch an Gottweisswas liegen koennen, da wir hier den gesamten Code nicht vorliegen haben.
Der Bug liegt uebrigens im Javateil, da SHA oktetweise Fuetterung voraussetzt, falls nichts anderes angegeben ist und ich mich da nicht irre.

so short

Christoph Zurnieden