2013-02-20 15 views
5

Używam KeyStore aby chronić swój klucz prywatny, ale gdy linia:Przechowywanie klucza przy użyciu KeyStore w Androidzie

FileOutputStream fos = ctx.openFileOutput("bs.keystore", Context.MODE_PRIVATE); 

jest wykonywany mam ten wyjątek:

'java.lang.NullPointerException'. 

nie rozumiem gdzie to jest problem.

Kod:

private Context ctx; 

    public DataSec(Context ctx) 
    { 
    ctx = this.ctx; 
    } 

    public void genKey() throws Exception 
    { 
    SecretKey key = KeyGenerator.getInstance("AES").generateKey(); 

    KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 
    ks.load(null, "clavedekey".toCharArray()); 

    PasswordProtection pass = new PasswordProtection("fedsgjk".toCharArray()); 
    KeyStore.SecretKeyEntry skEntry = new KeyStore.SecretKeyEntry(key); 
    ks.setEntry("secretKeyAlias", skEntry, pass); 

    FileOutputStream fos = ctx.openFileOutput("bs.keystore", Context.MODE_PRIVATE); 
    ks.store(fos, "clavedekey".toCharArray()); 
    fos.close();   
    } 

Dzięki za pomoc!

Odpowiedz

4

Zmiana:

public DataSec(Context ctx) 
{ 
ctx = this.ctx; 
} 

Aby

public DataSec(Context ctx) 
{ 
    this.ctx = ctx; 
} 

Teraz jesteś przypisując parametr kontekstu w sposób do tej samej wartości jako globalnej, która jest zerowa. Z tego powodu twój kontekst nie jest zapisywany.

+1

W tym problemie straciłem ponad godzinę. Naprawdę czuję się bardzo głupio. Dzięki! – gzanitti

+0

Dlatego należy używać ostatecznego słowa kluczowego na temat parametrów metody. –

+1

hello Raghav Skąd wiemy, że nasz klucz jest zapisany oznacza, czy istnieje sposób na odzyskanie klucza z magazynu kluczy? –

Powiązane problemy