Как сохранить секретный ключ от данного байта в AndroidKeystore? - PullRequest
0 голосов
/ 12 июня 2019

Я хочу импортировать секретный ключ, который генерируется из данного байтового массива, в Android Keystore. Но возникает некоторое исключение.

Кто-нибудь знает, как импортировать секретный ключ в этой ситуации?

Я попробовал следующий код:

try {
            byte[] keyBytes = new byte {0x31,0x32,0x33};
            SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA256");
            KeyStore ks = KeyStore.getInstance("AndroidKeyStore");
            ks.load(null);
            KeyStore.SecretKeyEntry entry = new KeyStore.SecretKeyEntry(signingKey);
            ks.setEntry("my_key", entry,
                    new KeyProtection.Builder(KeyProperties.PURPOSE_SIGN).build());
        } catch (Exception ex) {
            ex.printStackTrace();
}

Исключение составляет:

W/System.err: java.security.KeyStoreException: Failed to import secret key. Keystore error code: -6 
W/System.err:     at android.security.keystore.AndroidKeyStoreSpi.setSecretKeyEntry(AndroidKeyStoreSpi.java:742)

W/System.err:     at
android.security.keystore.AndroidKeyStoreSpi.engineSetEntry(AndroidKeyStoreSpi.java:1060)
W/System.err:     at
 java.security.KeyStore.setEntry(KeyStore.java:1596)

1 Ответ

0 голосов
/ 13 июня 2019

Я решил проблему, убедившись, что длина байтового массива поддерживается хранилищем ключей.

Ниже приведен мой модифицированный код, который работает на данный момент

     try {
            //32bytes (256bit)
            byte[] keyBytes = "0123456789ABCDEF0123456789ABCDEF".getBytes();
            SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA256");
            KeyStore ks = KeyStore.getInstance("AndroidKeyStore");
            ks.load(null);
            KeyStore.SecretKeyEntry entry = new KeyStore.SecretKeyEntry(signingKey);
            ks.setEntry("my_key", entry,
                    new KeyProtection.Builder(KeyProperties.PURPOSE_SIGN).build());
     } catch (Exception ex) {
            ex.printStackTrace();        
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...