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