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?
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:
Dann, wenn Sie entschlüsseln müssen ...
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)
.)
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.