Вы найдете ответ на странице , которая была зарегистрирована в сообщении об исключении:
Начиная с Android P, мы планируем отказаться от некоторых функций из B C провайдер, дублированный провайдером AndroidOpenSSL (также известным как Conscrypt). Это повлияет только на приложения, которые явно указывают поставщика B C при вызове методов getInstance()
. Чтобы быть ясным, мы не делаем это, потому что мы обеспокоены безопасностью реализаций от поставщика B C, а не потому, что дублирующая функциональность влечет за собой дополнительные расходы и риски, но не дает большой выгоды.
Если вы укажете провайдера по имени или по экземпляру - например, Cipher.getInstance("AES/CBC/PKCS7PADDING", "BC")
или Cipher.getInstance("AES/CBC/PKCS7PADDING", Security.getProvider("BC"))
- поведение, которое вы получите в Android P, будет зависеть от того, какой уровень API предназначен для вашего приложения. Для приложений, ориентированных на уровень API до P, вызов возвратит реализацию B C и зарегистрирует предупреждение в журнале приложений. Для приложений с таргетингом Android P или более поздней, вызов выдаст NoSuchAlgorithmException
.
. Чтобы решить эту ошибку:
Чтобы устранить эту проблему, следует прекратить указывать поставщика и используйте реализацию по умолчанию.
Так что в вашем случае избавьтесь от спецификации поставщика:
JcaPEMKeyConverter converter = new JcaPEMKeyConverter();