UTF-8 Probleme.

C

coreytaylor211

Fortgeschrittenes Mitglied
5
Hallo zusammen,
Ich habe wieder ein (ich hoffe kleines) Problem mit meiner App.

Und zwar soll das Programm einen String verschlüsseln und den Schlüssel ausgeben, das klappt auch alles soweit nur hapert es mit der Darstellung ein wenig.
Hier mal die Ausgabe von der App.
Code:
]a??u???Z7-
Und hier die Ausgabe von LogCat.
Code:
09-30 14:40:11.774: D/DEBUG(934): Schlüssel = [B@40d21188
 
Guten Abend,
Danke schonmal für deine Hilfe aber hat Leider nicht geholfen, der String stammt aus einer direkteingabe.

Ich glaube ich weiß wo das Problem liegt nur kann ich es irgendwie nicht beheben.

Und zwar läuft das über
Code:
import android.util.Base64;
dieser hier geht ja nicht
Code:
import org.apache.commons.codec.binary.Base64;
trotz den Plugins
Codec - Home

hier nochmal ne neue Ausgabe von LogCat
Code:
09-30 19:50:31.838: D/DEBUG(28766): Schlüssel = bCJ't
09-30 19:50:31.868: D/DEBUG(28766): Schlüssel2 = bCJ't
Da muss es doch etwas geben damit das richtig angezeigt wird oder nicht ???

Ich habe schon googel durch auch viel gefunden nur wollte ich Eclipse jetzt nicht mit 1000 plugins zu pflastern.

Vielen Dank im Vorraus für eure Mühe.
 
Laut deinem ersten Post versuchst du, ein Byte-Array auszugeben. [B@40d21188 lässt zumindest darauf schliessen. Alle nicht-druckbaren Zeichen können dann natürlich nicht korrekt angezeigt werden.

Versuch mal vor dem ausgeben den Key in einen String zu konvertieren:

Code:
//mit default charset
String s = new String(bytes);

//mit UTF-8
String s = new String(bytes, "UTF-8");
 
  • Danke
Reaktionen: coreytaylor211 und ui_3k1
@Zoopa

Ja das habe ich leider schon so aber es geht leider trotzdem nicht.
Ich habe es auch mit verschiedenen Möglichkeiten ausprobiert aber es kommt immer wieder auf das gleiche.

Wenn noch jemand anderes auch nur ne kleine Idee hat einfach raus damit.
Mit freundlichen grüßen
Corey
Und einen guten Morgen.
 
Zeig am besten mal etwas mehr Code oder erklär etwas genauer, welche Schritte genau ablaufen.

Du liest ja einen String vom User ein. Wie machst du das und was passiert alles damit, bevor du ihn wieder ausgibst?

Crypto-Funktionen arbeiten normalerweise immer mit Bytes, daher macht es auch Sinn, dass du da irgendwann ein Byte-Array hast. Der interessante Punkt ist, wie du zu diesem Byte-Array kommst. Schlüssel haben ja in der Regel eine fixe Länge (128, 256, ... bit), daher reicht es im Normalfall nicht, einen beliebigen String vom User einzulesen und direkt als Key zu verwenden (wäre sowieso nicht zu empfehlen). Der Key wird normalerweise irgendwie transformiert (z.B. Key Derivation), um auf die exakte Länge zu kommen. Danach ist es auch sehr wahrscheinlich, dass du den neuen Key nicht mehr direkt als String anzeigen kannst, weil er nicht-druckbare Zeichen enthält. An diesem Punkt zeigt man den String normalerweise in einer Hex-Repräsentation an (was dann natürlich trotzdem ein schön formatierter String sein kann).
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: coreytaylor211
Also das erfassen von dem String erfolgt über
Code:
    String message = (edittextaes.getText().toString());
Dann wird das Byte Array erzeugt
Code:
  AES encrypter = new AES(new byte[16]);
Jetzt die eigentliche umwandelung vom String
Code:
 byte[] encrypted = encrypter.encrypt(message.getBytes("UTF-8"));

Und jetzt die Ausgabe
Code:
 edittextver.setText(new String (encrypted,"UTF-8"));
 
Tja, da muss natürlich Binärsalat gerauskommen. Das Chiffrat wirst du kaum gescheit direkt ausgeben können. (besser in Base64 oder Hexadezimaldarstellung umwandeln)

PS: AES ist aber nicht der "normale" Weg, Sachen per AES zu verschlüsseln. Ist das was eigenes? Dann hoffe ich mal, dass du Keyhashing, Padding, Block Chaining und Salting/IV richtig gemacht hast? :D

Schau dir lieber die JCE Beispiele an, die kümmern sich um all diese Dinge.
 
  • Danke
Reaktionen: coreytaylor211
Ahhh :rolleyes2: jetzt :biggrin:
Ich hatte das mal mit base64 versucht aber irgendwie hat da android was gegen mich :sleep: und Java selber ist das ja kein Ding.
Aber ich habe mir das mal zu Herzen genommen und einfach in hex umgewandelt jetzt kommt auch was gescheites dabei raus.
Hier mal der Anhang
Code:
 					StringBuilder sb = new StringBuilder();
					for (byte b : encrypted) {
						sb.append(String.format("%02X ", b));
					}
So ich will hoffen das es jetzt alles soweit klappt :) vielen Dank nochmal
Ps: Wenn du noch mehr gute Denkanstöße hast immer her damit :thumbsup:
 
Ich bin ja faul:

Code:
android.util.Base64.encodeToString( encrypted, 0 )
:D
 

Ähnliche Themen

S
Antworten
4
Aufrufe
995
Sempervivum
S
R
Antworten
3
Aufrufe
1.625
Ritartet
R
N
Antworten
8
Aufrufe
1.018
NerkJ
N
Zurück
Oben Unten