【问题标题】:Storing key using KeyStore in Android在 Android 中使用 KeyStore 存储密钥
【发布时间】:2013-02-05 00:13:39
【问题描述】:

我正在使用 KeyStore 来保护我的私钥,但是当线路:

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

感谢您的帮助!

【问题讨论】:

    标签: java android exception keystore fileoutputstream


    【解决方案1】:

    变化:

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

    到

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

    现在,您将方法中的上下文参数分配给与全局参数相同的值,即 null。因此,您的上下文实际上并没有被存储。

    【讨论】:

    • 我在这个问题上损失了一个多小时。我真的觉得很傻。谢谢!
    • 这就是为什么你应该在方法参数上使用 final 关键字。
    • 你好 Raghav 我们如何知道我们的密钥已保存意味着有什么方法可以从密钥库中检索密钥。?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多