当前位置: 首页 > 面试题库 >

在Android中使用KeyStore存储密钥

齐涛
2023-03-14
问题内容

我正在使用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();        
    }

谢谢您的帮助!


问题答案:

更改:

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

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

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



 类似资料:
  • 生成SQLCipher的密钥。 将机密存储在android Keystore中。 从密钥存储区检索机密。 我几乎找到了我需要的所有东西,但是我很难让下面的代码片段一起工作。 我发现了这些很好的例子,但它们是创建公钥/私钥的,与其他许多例子一样,所以有点混乱,但我有以下几个例子。 那么问题是,我如何创建对称密钥并存储在keystore中?由于错误告诉我使用KeyGenParameterSpec,但与

  • 在一个应用程序中,我使用Android密钥库。我已经为整个密钥库和每个密码条目设置了密码。因为这些密码是字符串,所以它们存储在代码的字符串成员中。 显然,如果我想发布应用程序,这是不安全的,因为潜在的攻击者可以反编译apk并获取密码,因为它是硬编码在应用程序中的。 我的问题是: 在上面的场景中:攻击者是否能够读取我的密钥库文件,或者(在无根手机上)该文件是否只能由我的应用程序访问,因此仅密码是不够

  • 在SSO的实现中,我使用了bouncycastle(JAVA)进行签名、加密、解密和签名的验证。我有原始PGP公钥和私钥,我需要将它们存储在Java Keystore中。这些PGP公钥没有证书。 我知道对于公钥(根据Keystore的javadoc:http://docs.oracle.com/javase/6/docs/api/java/security/keystore.html),我必须创建

  • null 生成公钥/私钥对,其中私钥从不离开密钥库 将此对的公钥上载到服务器 在服务器上:创建随机对称AES密钥,并用用户上传的公共RSA密钥加密 在设备上:下载此加密的AES密钥 将其导入到硬件支持的密钥存储库中,以便使用该对的私钥对其进行解密,并以新别名存储 使用此新密钥别名执行对称加密和解密 1-4应该是可能的,我现在缺少的环节是第5点。在这个列表中。有没有人可以帮助我,告诉我这是不是可能的

  • 我是Android安全方面的新手。我已经使用Androidkeystore保存应用程序机密。为了从Android keystore中获得保存的密钥,我需要在每次别名密钥中传递我在加密时传递过的内容。所以,我的问题是,我还想安全地保存别名密钥。因此,没有一个键通过查看代码看到别名键。请帮帮我。

  • 问题内容: 我想知道如何在Android中安全存储 加密密钥 吗?保护加密和秘密密钥的最佳方案是什么? 问题答案: 根据您的评论,您需要使用适用于当前Android版本和旧Android版本的本地密钥对数据进行加密 Android Keystore 旨在生成和保护您的密钥。但是它不适用于18级以下的API级别,并且在API 23级之前有一些限制。 您将需要一个随机对称加密密钥,例如AES。AES密