Android: инициализируйте PublicKey с файлом ключа, хранящимся в каталоге Assets

java android encryption public-key-encryption private-key

596 просмотра

1 ответ

113 Репутация автора

В настоящее время я работаю над шифрованием RSA и пытаюсь зашифровать и расшифровать, используя файл открытого и закрытого ключа, который хранится в каталоге активов в проекте Android.

В настоящее время файл открытого ключа находится в assets / public_key.pem, и я использую код ниже, чтобы прочитать файл, чтобы получить ключ.

InputStream is = assetManager.open(stringKey);
String publicKeyString= "";
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;

while (( line= reader.readLine()) != null) {
    publicKeyString += line;
}

is.close();

Затем я получаю значение publicKeyString. Затем я попытался инициализировать объект PublicKey с publicKeyString, используя следующий код.

PublicKey pubKey = null;
byte[] publicBytes = Base64.decode(publicKeyString, Base64.DEFAULT);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
pubKey = keyFactory.generatePublic(keySpec);

Однако я получил следующее исключение

java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag

Я не уверен, что что-то не так с самим файлом открытого ключа или кодом, который я использую. Любая идея?

Автор: androisojavaswift Источник Размещён: 18.07.2016 11:40

Ответы (1)


0 плюса

344 Репутация автора

Это старый вопрос, но в случае, если кто-то сталкивается с этой проблемой, ответ дается в этом посте .

Подводя итог:

X509EncodedKeySpec ожидает данные в кодировке DER, а не в кодировке PEM. Ваш код будет работать нормально, если вы просто отбросите блоки «BEGIN» и «END» из содержимого открытого ключа

Автор: giroxiii Размещён: 19.03.2018 01:32
Вопросы из категории :
32x32