Как мне получить пару ключей ECDH в Android 9.0 pie? - PullRequest
0 голосов
/ 04 июля 2019

Я хочу получить пару ключей ECDH (открытый ключ и закрытый ключ).Этот метод не работает в Android 9.0 pie, поскольку поставщик безопасности "BC", "SC" удален из этой версии.Я попытался ниже метод

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC", "BC");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
keyGen.initialize(256, random);
KeyFactory kaif = KeyFactory.getInstance("EC", "BC");
KeyPair pair = keyGen.generateKeyPair();
PrivateKey privateKey = pair.getPrivate();
PublicKey publicKey = pair.getPublic();

Ниже ключ, который я получил при использовании "БК" провайдера с Бове кодом, EC Private Key S: 30e3def89f6aca7ab4e1e0e0367bf936955339db03a0c32c63a08293066f9423 EC Public Key X: 1675a6b1c8097f651be6f6a555ab9e5da83f03d3082041ae29111609b98594be Y: ed23f9263c6a1e8892d03a0c33ed9d8bfc5886dfe67fb7947457e3ff43baffca

1005 * Метод 2: Security.insertProviderAt (BouncyCastleProvider (), 1);

Когда я добавляю Bouncy castle в gradle и пытаюсь инициировать, как описано выше, вывод будет следующим: privateKey = {OpenSSLECPrivateKey @ 7518} "OpenSSLECPrivateKey {params= {ECDSA-Параметры: (256 бит) \ n}} "publicKey = {OpenSSLECPublicKey @ 7519}" Открытый ключ: (256 бит) \ n00000000 04 5c 2c 76 23 09 41 c4 16 e2 99 ea e0 fa ed 16 |. \, v # .A ......... | \ n00000010 52 ca 91 d2 0c fe 7f c4 94 76 54 9a 3c 49 ab a5 | R ........ vT.

Мне нужно, чтобы это было так же просто, как указано выше, в удобочитаемом формате. Нужно ли выполнять какое-либо преобразование, чтобы получить ключи в буквенно-цифровом формате

1 Ответ

2 голосов
/ 04 июля 2019

Попробуйте добавить SpongyCastle вручную:

Security.insertProviderAt(BouncyCastleProvider(), 1);

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
keyGen.initialize(256, random);
KeyFactory kaif = KeyFactory.getInstance("EC");
KeyPair pair = keyGen.generateKeyPair();
PrivateKey privateKey = pair.getPrivate();
PublicKey publicKey = pair.getPublic();

добавьте это к вашим build.gradle зависимостям:

/* spongy castle */
implementation "com.madgag.spongycastle:core:1.58.0.0"
implementation "com.madgag.spongycastle:prov:1.58.0.0"

Убедитесь, что BouncyCastleProvider() исходил от spongycastle:

import org.spongycastle.jce.provider.BouncyCastleProvider

...