Java-String zum Bytearray zurück zum String

8

Ich habe eine Client- und Server-Java-Anwendung, die verschlüsselten Text benötigt, der sich gegenseitig durchläuft. Ich verwende eine XOR-Verschlüsselung, um den gewünschten Text zu verschlüsseln.

Das Problem ist, dass readline () keine Zeichenfolge akzeptiert, die XOR-verknüpft wurde und nur akzeptiert wird, wenn sie in Bytes ist.

Also habe ich meinen Klartext (String) in ein Byte-Array auf der Client-Seite konvertiert und versucht, auf der Serverseite zurück in eine Zeichenfolge zu konvertieren.

Leider ist das Ergebnis, das ich suche, immer noch jibberisch und nicht der Klartext, den ich gesucht habe.

Weiß jemand, wie man Bytearrays in den ursprünglichen String zurückversetzt? Oder gibt es eine bessere Möglichkeit, einen XOR-verschlüsselten Text über die Funktion readline () zu senden?

    
NewJavaProgrammer 19.10.2009, 06:49
quelle

3 Antworten

19

Nachdem Sie etwas wie XOR angewendet haben, erhalten Sie willkürliche Binärdaten - nicht eine codierte Zeichenkette.

Der konventionelle sichere Weg, um beliebige Binärdateien in Text zu konvertieren, ist die Verwendung von base64 - nicht versuche einfach eine neue Zeichenkette daraus zu erstellen. Ihr Prozess wäre also etwa so:

  • Beginnen Sie mit reinem Text als String.
  • Kodieren Sie den einfachen Text mit UTF-8, UTF-16 oder etwas Ähnlichem. Verwenden Sie nicht die Standardcodierung der Plattform oder irgendeinen restriktiven wie ASCII. Sie haben jetzt ein Byte-Array.
  • Wenden Sie Ihre Verschlüsselung an. (XOR ist ziemlich schwach, aber lassen wir das auf einer Seite.) Sie haben immer noch ein Byte-Array.
  • Wenden Sie die base64-Codierung an, um eine Zeichenfolge abzurufen.

Dann, wenn Sie entschlüsseln müssen ...

  • Wenden Sie base64 Decodierung an, um Ihre Zeichenfolge in ein Byte-Array zu konvertieren.
  • Wenden Sie Ihren binären Entschlüsselungsprozess an (z. B. XOR erneut). Sie haben immer noch ein Byte-Array.
  • Now dekodiert dieses Byte-Array in eine Zeichenfolge, z. mit new String(data, utf8Charset) , um die ursprüngliche Zeichenkette zurückzubekommen.

Es gibt verschiedene Java base64-Bibliotheken, z. B. diese Klasse in Apache Commons Codec . (Sie möchten die Methoden encodeToString(byte[]) und decode(String) .)

    
Jon Skeet 19.10.2009 06:54
quelle
6

antwort von Ссылка

%Vor%     
Ibrahim 15.11.2010 15:40
quelle
1

Erstens, rufen Sie keine XORing-Verschlüsselung auf. Im Ernst, die CipherOutputStream und CipherInputStream sind für Sie da, wenn Sie Ihre Daten schützen müssen.

Danke für die Stream-Verkettung, Sie können DataOutputStream - & gt; CipherOutputStream - & gt; ByteArrayOutputStream. Dadurch erhalten Sie richtig verschlüsselte Bytes. Verwenden Sie die umgekehrten APIs am anderen Ende, und Sie erhalten Ihre Zeichenfolge zurück.

    
malaverdiere 19.10.2009 08:03
quelle

Tags und Links