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

生成对称密钥并存储在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中。

  • 使用指定密码生成对称密钥,保存并返回ID。 调用: web3.shh.generateSymKeyFromPassword(password, [callback]) 参数: password:String - 用于生成对称密钥的密码 callback:Function - 可选的回调函数,其第一个参数为错误对象,第二个参数为返回结果 返回值: String - 成功时返回ID,否则返回错误信息