Byte To String

  • Themenstarter Themenstarter xoo
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
X

xoo

Gast
Hallo,

ich habe folgendes Problem:

ich habe ein Byte Array in dem ein mit XOR verschlüsselter String enthalten ist. Ich muss dieses Byte Array nun in ein String umwandeln.
Das Problem ist, daß bei einem Zeichen 0x90 bzw. 144 Dec als Byte ein Zeichen im String enthalten ist, was 0x3F entspricht.
Das Problem ist, daß ich dieses Array unbedingt als String benötige, weil ich damit ein HTTP Request senden muss.

Ich habe schon probiert:
Code:
    new String( byte[], "ISO-8859-1" )
    new String( byte[], "ISO-8859-15" )
    new String( byte[], "CP1252" )

Kann mir jemand helfen ?

Oder gibts nen Trick, den ich noch nicht kenne ?

Danke im Voraus,

xoo
 
also Base64 ist leider nicht das was ich suche.

ich muss folgenden String als Parameter in der URL übergeben

úþýž€ÿæçì…œ‘ËÞÂΗ‘ƒ~UBb}Ÿš‚ýùàÜûꔥÚòççß’”š˜Žõþã’‹ÿñ—õ‰„››‰

übergeben tut Java allerdings dies hier:
úþýž€ÿæçì…œ‘ËÞÂΗ‘ƒ~UBb}Ÿš‚ýùàÜûꔥÚòççß’”š˜Žõþã’?‹ÿñ—õ‰„››‰


der Knackpunkt liegt bei dem 11. Zeichen von Hinten

Leider bringt mir da Base64 nichts.

Gibts noch irgendwelche Ideen ? Es kann doch nicht sein, daß ein byte b = 0x90 in einem String zu 0x3F wird oder doch ?


Danke,
xoo
 
aussderm

du xorst die bytes

=> dann machst du einen string daraus ? encoding?

dann schickst du es an den server, der macht automatisch einen string daraus [im Encoding der "WEBSEITE", vereinfacht gesagt]

da kriegst du nicht unbedingt den originalstring zurück...
 
URLEncoder ist mir auch schon durch den Kopf geschwirrt, leider bringt das nichts, weil die Anwendung an die ich diesen String schicke, keinen "URLDecode" kann.

Es ist zum Heulen.

Sagen wirs mal so, es muss nicht unbedingt ein Byte Array sein. Sagen wir, ich habe einen Text, den ich verschlüsseln muss mit mehrfachem XOR. Das Ding liegt mir dann eben als int / char / byte Array oder sonst was vor.
Das Problem ist, daß HttpURLConnection nur nen String nimmt in dem dieses Sonderzeichen ??? als 0x3F vorkommt.
Ich hab echt keine Idee mehr ...


Danke trotzdem,

xoo
 
mal ganz anders,
ich habe hier mal ein Testprogramm was meine Sorge ausdrückt:

Code:
public class test2 {
    public static void main(String[] args) {

        char y = 0x90;
        System.out.println("y = " + ((int) y) );

        // schnipp: was muss hier passieren damit es funzt ?
        String s = "" + y;
        // schnapp: 

        byte[] x = s.getBytes();
        System.out.println("x = " + x[0]);

    }
}


rauswerfen tut das ganze:

y = 144
x = 63


Wie komme ich zum x=144 ??? ...
 
hm, meinst du sowas:
Code:
 public static void main(String[] args) {
		for(int i = 0; i < 256; i++){
   		    char y = (char)i;
		    String s = "" + y;
      		byte[] x = s.getBytes();
      		int a = (int)x[0];
      		if(a < 0){
      			a += 256;
      		}
      		System.out.println((int)y + "::" + a);
		}
    }
Bei denen wo a = 63 ist muss der Zeichensatz wohl Probleme mit dem Zeichen haben ... ???:L
 
getBytes ist deprecated -> nimmt das StandardEncoding deiner Plattform; wenn dann musst du das Encoding angeben

wenn du zwischen String und byte[] hin und herwechseln willst, musst du sicherstellen, dass du immer das gleiche Encoding erzwingst, und selbst dann ist das nicht ganz sicher ("äquivalente Zeichen in Unicode")

so geht das NICHT

nimm das ganze als char[], mach daraus ein int[], mach was damit und um dann das ganze über eine URL zu übertragen würde ich doch zu base64 raten...
 
Habs ganz anders gelöst, habe mir meinen eigenen HTTPClient geschrieben und schreibe / lese die Bytes direkt vom Stream ... ne andere Möglichkeit sah ich nicht mehr, weil alle Klassen die über dem Socket liegen, nur noch Strings / char[] annehmen und dann funzt das Ganze net mehr.

Bye, und dennoch danke für Eure Anregungen.

xoo
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben