App mit Passwort sichern

  • 14 Antworten
  • Letztes Antwortdatum
AppDos

AppDos

Neues Mitglied
1
Hi,

ich möchte meine App mit einem Passwort sichern, d.h. wenn man die App zum ersten mal startet muss man ein Passwort eingeben und bestätigen.
Bei jedem weiteren start muss man einfach nur das zuvor gewählte Passwort eingeben(auch beim pausieren der App).
Meine Frage:
Wie erkennt die App das sie zum ersten mal startet(wahrscheinlich wenn kein Passwort festgelegt ist)
Wo wird das Passwort am besten gespeichert (Datei, DB, etc.)
Wie soll das Passwort am besten gespeichert werden(Verschlüsselung usw.)

Hoffe ihr habt da ein paar Ideen, vielen Dank ^^
 
Hey :)
Ich hab das gestern geschrieben :p
Code:
import android.app.*;
import android.content.*;
import android.os.*;
import android.view.*;
import android.view.View.*;
import android.widget.*;

public class MainActivity extends Activity
{
static String username;
static String password;
public final Activity me = this;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
{
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

final EditText et_username = (EditText) findViewById(R.id.et_username);
final EditText et_password = (EditText) findViewById(R.id.et_password);
Button btn_confirm = (Button) findViewById(R.id.btn_confirm);

btn_confirm.setOnClickListener(new OnClickListener()
{
public void onClick(View p1)
{
username = et_username.getText().toString();
password = et_password.getText().toString();
onCheckProfile();
}
});
    }
public void onCheckProfile()
{
SharedPreferences sp = getSharedPreferences("Profile", 0);

if(sp.getString("Username", username).equals(""))
{
onSaveProfile();
}
else
if(sp.getString("Username", username).equals(username) && sp.getString("Password", password).equals((password)))
{
Intent intt = new Intent(me, UserInfo.class);
startActivity(intt);
}
else
{
Toast.makeText(getApplicationContext(), "Invalid Password or Username!\nPlease try again!", Toast.LENGTH_SHORT).show();
}
}
public void onSaveProfile()
{
SharedPreferences sp = getSharedPreferences("Profile", 0);
SharedPreferences.Editor spe = sp.edit();

spe.putString("Username", username);
spe.putString("Password", password);

spe.commit();

}
}
[Code]
Username ist bei dir nicht erforderlich :)

Wenn du das als MainActivity nimmst, wird es bei jedem Start auf gerufen. Theoretisch könntest du in jeder Klasse folgendes einfügen.
[Code]
public void onPause
{
super.onPause();
finish();
}

Dadurch geht es ja auf die Main :)
 
Passwort im Klartext in den SharedPrefs? (du weißt, dass das nur schlichte XML-Dateien sind und die mit jedem xbeliebigen Editor geöffnet werden können?)
 
Ähm ne wusste ich nicht ^^
Danke :)
 
Ohne root? Und mir root ist eh egal.

Edit: Stimmt, mit adb backup kommt da auch jeder ohne root dran (Aber auch an die zu schützenden Daten). Aber anscheinend gibt es die Möglichkeit App Daten von der Backup Möglichkeit auszuschließen. Der google Authentikator macht das z.B.

cu
 
Zuletzt bearbeitet:
Sonst könntest du ganz normal eine Datei erstellen, und die mit AES256 verschlüsseln.
Solange niemand den Key hat unknackbar :D
 
Greenstar schrieb:
Solange niemand den Key hat unknackbar :D

Wenn der Nutzer das Passwort ständig eintippen muss, dann kann man sich beim brute force auf die kurzen Passwörter konzentrieren ;-)

cu
 
Und wenn man vorgibt mindestens 1 Großbuchstaben, mindestens 1 Zahl und mindestens 1 Sonderzeichen? ;) (+ Großbuchstaben nicht am Anfang, + ....) Als Entwickler kannst du das zumindest vorschreiben ... und schon wartest du bei BruteForce ewig ;)
 
kleinerkathe schrieb:
Und wenn man vorgibt mindestens 1 Großbuchstaben, mindestens 1 Zahl und mindestens 1 Sonderzeichen? ;) (+ Großbuchstaben nicht am Anfang, + ....) Als Entwickler kannst du das zumindest vorschreiben ... und schon wartest du bei BruteForce ewig ;)

Witzigerweise erleichterst du mit solchen Vorgaben das brute force ;) Weil, dann muss man die Kombinationen, die diese Vorgaben nicht erfüllen nicht mehr testen ;) Es nicht vorzuschreiben, aber der Nutzer nutzt die Sonderzeichen, das bringt es :)
Aber über die Länge bekommt man hier eh mehr Sicherheit. Müsste man durchrechnen, aber so aus dem Bauch herraus... 12 Zeichen [a-z,A-Z,0-9] bringen mehr als 8 Zeichen mit Sonderzeichen.

keepass2android hat da ne gute Idee mit dem quick Unlock. Beim Start wird das volle Password eingegeben (und damit der Datensatz enschlüsselt), beim wiederaufrufen (Datenbank ist eh noch im Speicher) nur die letzten x Zeichen davon (eine falsche Eingabe und es braucht wieder das volle Password).

cu
 
Bevor das hier ausartet, in der App sind jetzt keine Kontodaten oder so gespeichert, nur ein paar persönliche Infos, die nicht unbedingt jeder lesen soll der das Handy mal in der Hand hat.
Also, seh ich das jetzt so richtig ?
Beim Start der App prüft die App ob ein Passwort in der Datenbank(braucht die App so oder so, dann kann ich auch da das PW speichern) vorhanden ist,
wenn nicht muss der Benutzer eins festlegen.
Ich muss wie gesagt kein 100% unknackbare Verschlüsselung haben. Welche soll ich nehmen(wenn möglich wenig Aufwand).

QuickUnlock werde ich mal im Hinterkopf behalten hört sich aber gut an danke ^^
 
Schau mal hier unter dem Stichwort "backup"
AndroidManifest.xml - google-authenticator - Two-step verification - Google Project Hosting

Und hier stehen auch noch einige interesannte Kommentare
http://code.google.com/p/google-aut...or/AuthenticatorApplication.java?repo=android

[Man darf ja auch mal schauen wie es die Profis machen ;)]

Also den Zugangscode im Klartext in der Datenbank speichern und die Nutzereingabe vergleichen. Dann ist das ohne root halbwegs sicher. Verschlüsselung ist eh nicht so einfach wenn mans richtig machen will.

cu
 
Zuletzt bearbeitet:
einfach nur allowBackup = false ? najut wenns reicht ^^
 
Also Leute, Passwörter in Klartext speichern ist imho ja mal echt ein No-Go...

Einfach als Hash ablegen, Nutzereingabe dann damit vergleichen und gut ist. Rest der Daten würde ich nicht verschlüsseln, wenn es keine kritischen Daten sind, sondern es nur um eine einfache Zugangssperre geht.
 
  • Danke
Reaktionen: AppDos
reneph schrieb:
Also Leute, Passwörter in Klartext speichern ist imho ja mal echt ein No-Go...

Einfach als Hash ablegen, Nutzereingabe dann damit vergleichen und gut ist. Rest der Daten würde ich nicht verschlüsseln, wenn es keine kritischen Daten sind, sondern es nur um eine einfache Zugangssperre geht.

Ja, aber wenn man eh die Datenbank hat, dann hat man auch die Daten. Dann ist es auch egal ob man da drin auch das Passwort im Klartext speichert ;)

Aber prinzipiell hast du natürlich recht.

AppDos schrieb:
einfach nur allowBackup = false ? najut wenns reicht ^^

Naja, zumindest kann dir dann keiner (der dein Handy 5 Minuten in die Finger bekommt) mal schnell und unbemerkt die Daten per adb backup klauen. Sofern das Handy nicht gerootet ist, mit root kommt man ja problemlos an die Datenbank.

cu
 
Nein, auf keinen Fall. Es geht ja nicht darum, dass jemand die Daten aus einer Datenbank auslesen kann, es geht um ein Passwort, mit dem man nicht spaßen sollte.

Da der geneigte User i.d.R. zu faul ist, neue Passwörter für neue Apps/Dienste etc. zu verwenden, wird meist das Passwort genutzt, welches der User auch bei sämtlichen anderen Sachen/Diensten/Apps nutzt. Und sowas in KLARTEXT speichern? Nein nein, dafür gibt es Hash-Funktionen, die kaum Aufwand machen und keine Passwörter im schlimmsten Fall preis gegeben werden.
 

Ähnliche Themen

L
Antworten
1
Aufrufe
146
swa00
swa00
migi01
Antworten
26
Aufrufe
843
migi01
migi01
D
Antworten
5
Aufrufe
319
swa00
swa00
BerndFfm
Antworten
7
Aufrufe
908
swa00
swa00
S
Antworten
27
Aufrufe
910
swa00
swa00
Zurück
Oben Unten