2013-02-20 74 views
5
關鍵密鑰庫

我使用密鑰庫來保護我的私人密鑰,但線的時候:存儲在Android中使用

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

執行我有這樣的例外:

'java.lang.NullPointerException'. 

我不明白的地方是問題。

代碼:

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

感謝您的幫助!

回答

4

變化:

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

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

現在,你指定的方法相同的值作爲全局的,這是空的上下文參數。由於這個原因,你的上下文並不實際存儲。

+1

我在這個問題上失去了一個多小時。我真的覺得很傻。謝謝! – gzanitti 2013-02-20 16:01:57

+0

這就是爲什麼你應該在方法參數上使用final關鍵字。 – 2014-03-31 14:17:33

+1

hello Raghav我們如何才能知道我們的鑰匙是否已被保存,這意味着有什麼方法可以從鑰匙庫中取回鑰匙。 – 2014-06-13 12:09:58