2013-02-20 10 views
5
Memorizzazione

Sto usando KeyStore per proteggere la mia chiave privata, ma quando la linea:chiave utilizzando KeyStore in Android

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

viene eseguito ho questa eccezione:

'java.lang.NullPointerException'. 

non capisco dove è il problema

Codice:

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();   
    } 

grazie per l'aiuto!

risposta

4

Cambio:

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

Per

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

In questo momento, si sta assegnando il parametro di contesto nel metodo per lo stesso valore di quello globale, che è nullo. A causa di ciò, il tuo contesto non viene effettivamente memorizzato.

+1

Ho perso più di un'ora in questo problema. Mi sento davvero pazzo. Grazie! – gzanitti

+0

Ecco perché è necessario utilizzare la parola chiave final sui parametri del metodo. –

+1

ciao Raghav come facciamo a sapere che la nostra chiave è stata salvata significa che c'è un modo per ritirare la chiave dal keystore? –