当前位置: 首页 > 知识库问答 >
问题:

生成对称密钥并存储在android keystore中

孔理
2023-03-14
  • 生成SQLCipher的密钥。
  • 将机密存储在android Keystore中。
  • 从密钥存储区检索机密。

我几乎找到了我需要的所有东西,但是我很难让下面的代码片段一起工作。

private void InitialiseKeystore() throws ... {
    KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
    keyStore.load(null);
    boolean containsAlias = keyStore.containsAlias("com.example.myapp");

    KeyPairGenerator kpg = KeyPairGenerator.getInstance(
            KeyProperties.KEY_ALGORITHM_EC, "AndroidKeyStore");

    if (!containsAlias) {
        kpg.initialize(new KeyGenParameterSpec.Builder(
                alias,
                KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
                .setDigests(KeyProperties.DIGEST_SHA256,
                        KeyProperties.DIGEST_SHA512)
                .build());

        KeyPair kp = kpg.generateKeyPair();
    }

我发现了这些很好的例子,但它们是创建公钥/私钥的,与其他许多例子一样,所以有点混乱,但我有以下几个例子。

KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128); //<------------------------------------- [ERRORS HERE]
SecretKey secretKey = keyGen.generateKey();
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(secretKey);
keyStore.setKeyEntry("key1", secretKeyEntry.getSecretKey().getEncoded(), null);
private static byte[] getRawSecret() throws Exception {
    KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
    keyStore.load(null);

    byte[] raw = keyStore.getKey("key1", null).getEncoded();
    return raw;
}
SQLiteDatabase.openOrCreateDatabase(databaseFile, getRawSecret().toString(), null);

那么问题是,我如何创建对称密钥并存储在keystore中?由于错误告诉我使用KeyGenParameterSpec,但与上面链接的示例一样,这需要创建公钥/私钥。我做错了什么?

共有1个答案

窦凯定
2023-03-14

我用这个来解决我的问题,

指南:https://medium.com/@josiassena/using-the-android-keystore-system-to-store-sensitive-information-3A56175A454B

代码:https://gist.github.com/josiassena/3BF4CA59777F7DEDCAF41A495D96D984

 类似资料:
  • 问题内容: 我使用openssl生成认证密钥。这是我的命令: openssl genrsa -des3 -out enc_key.pem 1024 我导出到cer文件中,然后使用java keytool导入到Java keystore(jks)中。 密钥库听起来不错。我可以从Java应用程序加载密钥库。 问题是客户端连接到服务器(在这种情况下是FTP服务器,而不是Web服务器,而我使用apache

  • 如果我尝试使用OpenSSL命令行生成3TDES加密的PKCS 8密钥: 我得到: PKCS8 RFC没有说明必须使用哪种算法来创建密钥块。它确实给出了PKCS5算法作为例子。有没有办法使用OpenSSL创建一个由DES密钥加密的PKCS8密钥?如果不是,它是OpenSSL不支持的还是一个非常不标准的事情? 下面是通过OpenSSL命令行(密码测试)使用基于密码的加密创建的示例: 这里是我手工制作

  • <代码>java。安全KeyStore使用KeyStoreSpi实现来提供不同类型的KeyStore。基本OpenJDK支持JKS、JCEKS和PKCS12密钥库类型。前两个实现专有的Sun/Oracle格式,PKCS12是一个公共标准。 我知道JCEKS确实支持对称密钥,PKCS12则不支持。还有哪些实现(如Bouncy Castle)支持对称密钥?开发人员似乎想隐藏此类信息。E、 g.Boun

  • 我需要从NSData值生成对称AES密钥,该值创建如下: (initKey是base64字符串值。) 问题是如何从“解码数据”中生成密钥?(类似于Android秘书KeySpec) (我使用的是Swift 2.2) 这里是场景(在Android): 1-我有一个bas64字符串。 2-我将其解码为字节数组。 3-然后根据字节数组长度和AES类型创建secretkey。 4-最后定义一个基于secr

  • 编辑:没有必要的变通方法。使用上述代码可以将外部生成的密钥导入到Android Keystore中。

  • 我正在尝试创建一个公钥以允许我推送到Git,但我的. ssh文件夹尚未创建。 以下是我运行的命令: $ssh-keygen-t rsa-Cemaill@me.com 生成公共/私有rsa密钥对 输入保存密钥的文件(/h/.ssh/id\u rsa): 这就是H:驱动器配置、数据、配置文件、配置文件中的全部内容。V2 我认为有一个问题,因为当我得到提示输入文件,其中保存密钥(/h//. ssh/id