Speichern eines hmac-Schlüssels im Android-Keystore

Ich verwende den folgenden Code, um einen hmac-Schlüssel zu erstellen und als Zeichenfolge zurückzugeben.

KeyGenerator keyGen = null;
    try {
        keyGen = KeyGenerator.getInstance("HmacSHA256");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    SecretKey key = keyGen.generateKey();
    byte[] encoded = key.getEncoded();
    String s=Base64.encodeToString(encoded, Base64.DEFAULT);
    Log.i("Hmac key before encrypt",s);

    try {
        KeyStore keystore = KeyStore.getInstance("AndroidKeyStore");
        keystore.load(null, null);
        KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) keystore.getEntry("temp", null);
        RSAPublicKey publicKey = (RSAPublicKey) privateKeyEntry.getCertificate().getPublicKey();

        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");,
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] cipherBytes = cipher.doFinal(encoded);

        return Base64.encodeToString(cipherBytes,Base64.DEFAULT);


    } catch (UnrecoverableEntryException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (KeyStoreException e) {
        e.printStackTrace();
    } catch (IllegalBlockSizeException e) {
        e.printStackTrace();
    } catch (InvalidKeyException e) {
        e.printStackTrace();
    } catch (BadPaddingException e) {
        e.printStackTrace();
    } catch (NoSuchPaddingException e) {
        e.printStackTrace();
    } catch (CertificateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

Wie kann ich das im Android Keystore speichern? Ich habe versucht, den folgenden Code zu verwenden:

KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
        keyStore.load(null);

        KeyStore.ProtectionParameter param = new KeyStore.PasswordProtection("test".toCharArray());
        keyStore.setEntry("key1",hmacKey,param);

Ich erhalte eine Fehlermeldung, egal in welchem Format hmacKey ist: String / Bytes oderjavax.crypto.SecretKey. Im Folgenden sind die Fehler aufgeführt: Im Falle der Übergabe von KeyhmacKey:

Wrong 2nd argument type. Found: 'java.security.Key', required: 'java.security.KeyStore.Entry'

Same in Fällen, in denen ich eine Zeichenfolge oder ein Byte-Array übergebe.

Wenn ich den Parameter auf @ typisiert hajava.security.KeyStore.Entry, es funktioniert immer noch nicht.

Ist das der richtige Weg? Kann mir jemand Hinweise geben, wie der HMAC-Schlüssel mit einem Alias im Keystore gespeichert werden kann. Wie kann man den hmack key in @ umwandejava.security.KeyStore.Entry Format

Antworten auf die Frage(2)

Ihre Antwort auf die Frage