Android Hilfe bei Passwort einlesen

LStrike

Mitglied
Moin moin,

das Thema Sicherheit geht bei mir weiter. Ich habe eine Frag zu folgendem Sachverhalt:

Ich lese aus meiner GUI über ein EditText Feld ein Passwort wie folgt ein:
Java:
byte[] passwort = passwortFeld.getText().toString().getBytes();
Ich bin mir nicht ganz im Klaren, was dort intern passiert.

passwortFeld.getText() und getBytes() ist soweit klar, aber was macht das toString() genau?
Wird dort intern ein String zwischengespeichert, der dann bis die GarbageCollection kommt im Arbeitsspeicher liegt?

Gruß LStike
 
Das toString kannst du grad weglassen, das bewirkt nichts: String#toString
Edit: Ich gehe jetzt mal davon aus, dass getText deines Textfelds einen String returned, da das bei einem TextField ja so üblich ist.(Aber ich kenne natürlich dein Textfeld nicht)
 
Leider kann ich das toString() nicht weglassen, da die getText()-Methode einen Wert vom Type Editable zurück gibt.
Diesen Wert kann ich nicht direkt in ein byte[] überführen.


Zur Ergänzung:

Java:
passwortFeld = (EditText) findViewById(R.id.passwortFeldSender);
.....
byte[] passwort = passwortFeld.getText().toString().getBytes();
 
Mhm, bin mir auch nicht sicher wie das in Android best practice ist, aber ich würde das toString auch weglassen in dem Fall! Weiss jetzt aber auch nichts genaueres über die GC bei Android ;(
Aber der Vorteil von dem Editable ist ja eben, dass du es danach wieder ändern kannst!
D.h. ich würde mir das Editable holen, dann irgendwie das char-Array holen welches dahinter steckt(bzw eben charAt, nicht den String!!) und dieses mit dem eigentlichen Passwort vergleichen. Hinterher direkt wieder das Editable/char-Array durch clear() "löschen"
So bleibt dann auch kein String-Objekt im Speicher, sondern eben nur das Editable bzw. das char-Array, welches du dann ja aber verändert hättest.

Von wo hast du denn den Code dafür? Oder haste dir den selbst überlegt gehabt?
 
Editables bieten die Funktionen
Java:
getChars(int start, int end, char[] dest, int destoff)
// Exactly like String.getChars(): copy chars start through end - 1 from this CharSequence into dest beginning at offset destoff.
und
Java:
subSequence(int start, int end)
// Returns a CharSequence from the start index (inclusive) to the end index (exclusive) of this sequence.
Mit beiden lässt sich dein Problem schöner lösen.
LG Hemeroc
 
Der Code stammt von mir.
Das Passwort, welches dort Eingegeben wird, wird für eine AES-Verschlüsselung genutzt.
Ich werde dann nochmal schauen, ob ich an die einzelnen Elemente des Editable herankomme.

[Edit]:
Zu langsam 😉

Das sieht doch gut aus. Werde es mal versuchen so umzusetzen. Danke.
 
Zuletzt bearbeitet:

Zurück
Oben