Android преобразовать сгенерированный ключ AES в строку (base 64 / hex ...) - PullRequest
0 голосов
/ 26 мая 2020

Описание проблемы:

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

Когда мне нужно отправить данные на сервер, я используйте ключ AES для шифрования данных, используйте ключ publi c сервера для шифрования ключа AES и отправьте зашифрованные данные + зашифрованный ключ на сервер для расшифровки полной загрузки.

код для генерации ключа в android ниже:

public void generateKey()
{
    try {
        if (!keyStore.containsAlias(KEY_ALIAS)) {
            KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, AndroidKeyStore);
            keyGenerator.init(
                    new KeyGenParameterSpec.Builder(KEY_ALIAS,
                            KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
                            .setBlockModes(KeyProperties.BLOCK_MODE_GCM).setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
                            .setRandomizedEncryptionRequired(false)
                            .build());
            keyGenerator.generateKey();
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

Когда мне нужно зашифровать данные, я получаю ключ с помощью этой функции

private java.security.Key getSecretKey(Context context) throws Exception {
    return keyStore.getKey(KEY_ALIAS, null);
}

Используя этот ключ, я смог зашифровать данные. но проблема заключается в попытке зашифровать ключ, чтобы отправить его на сервер.

Я попытался получить ключ как byte [], чтобы зашифровать его, но с помощью функции

key.getEncoded();

в результате байтовый массив всегда нулевой.

Что здесь не так и как его решить?

Приложение для Android 23 +

1 Ответ

0 голосов
/ 26 мая 2020

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

Этот пример kotlin поможет:


@Throws(IOException::class, KeyStoreException::class, CertificateException::class, NoSuchAlgorithmException::class)
    fun saveKeyPair(pair: KeyPair, storeAlias: String) {
        val certificate = generateCertificate(pair)
        val keyStore = KeyStore.getInstance("AndroidKeyStore")
        keyStore!!.load(null, null)
        val x509CertificateObject = X509CertificateObject(certificate)
        keyStore.setKeyEntry(storeAlias, pair!!.private, null, arrayOf<java.security.cert.Certificate?>(x509CertificateObject))
    }

Надеюсь, что это может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...