Verschlüsseln in Ruby und Entschlüsseln in Java - Warum funktioniert es nicht?

8

Was mache ich falsch? Ich erwartete, dass das Java-Programm "privat" druckt. Mein Ziel ist es, die Methode MessageEncryptor.decrypt ruby ​​in Java zu schreiben.

Ruby-Verschlüsselung (der meiste Code wurde von MessageEncryptor übernommen, aber nicht zu Marshal modifiziert), aber ich habe ihn extrahiert, damit man besser sehen kann, was vor sich geht:

%Vor%

Was gedruckt:

tzFUIVllG2FcYD7xqGPmHQ == - UAPvdm3oN3Hog9ND9HrEA ==

Java-Code:

%Vor%

Was gedruckt

Entschlüsselt: [B @ 432a0f6c

    
Bradford 29.06.2012, 17:46
quelle

1 Antwort

19

Das ist das Problem - oder zumindest ein Problem:

%Vor%

Sie rufen toString() in einem Byte-Array auf. Arrays überschreiben nicht toString() . Das wird dir nicht geben, was du willst - wie du sehen kannst. Stattdessen müssen Sie etwas schreiben wie:

%Vor%

... aber Sie müssen wissen, welche Codierung verwendet wurde, um die ursprüngliche Zeichenfolge vor der Verschlüsselung in Bytes umzuwandeln. Es ist mir aus dem Ruby-Code nicht klar, welche Kodierung verwendet wird, aber wenn Sie explizit darüber sprechen können (idealerweise mit UTF-8), wird es Ihr Leben viel einfacher machen.

Kurz gesagt, ich verdächtige dieses Problem hat überhaupt nichts mit Verschlüsselung zu tun - es hat alles damit zu tun, in Ruby Text in Bytes zu konvertieren und dann dieselbe Bytefolge in eine Zeichenkette umzuwandeln in Java.

Natürlich kann die Verschlüsselung auch fehlschlagen , aber das ist eine andere Sache.

    
Jon Skeet 29.06.2012, 17:52
quelle

Tags und Links