从 Android P 开始,对于 AndroidOpenSSL (也称为 Conscrypt) 提供程序所重复的、来自于 BC 提供程序的部分功能,咱们计划将予以弃用。ide
此改动仅会影响在调用 getInstance() 方法时明确指定 BC 提供程序的应用程序。加密
须要说明的一点是,咱们此举的目的不是由于对 BC 提供程序的实施安全存在疑虑,而是由于重复功能会形成额外的成本和风险,却没法带来太多益处。3d
若是您在 getInstance() 调用中不会指定提供程序,则无需作出任何改动。日志
若是您按名称或实例指定提供程序 - 例如,Cipher.getInstance("AES/CBC/PKCS7PADDING", "BC") 或 Cipher.getInstance("AES/CBC/PKCS7PADDING", Security.getProvider("BC")) - 则 Android P 的行为将取决于您应用的目标 API 级别。orm
对于目标级别早于 P 的应用,调用会返回 BC 实施方法,并在应用日志中记录警告。对于目标级别为 Android P 或以后版本的应用,调用会抛出 NoSuchAlgorithmException。cdn
为了解决此问题,您须要中止指定提供程序,并使用默认实施方法。blog
在后续的 Android 版本中,咱们计划彻底移除 BC 提供程序的弃用功能。在移除后,全部请求 BC 提供程序的调用 (不论按名称仍是实例) 都会抛出 NoSuchAlgorithmException。ip
在先前的帖子中,咱们曾宣布自 Android Nougat 开始弃用 Crypto 提供程序。
此后,以 API 23 (Marshmallow) 或更早级别为目标的应用程序请求 Crypto 提供程序会成功,但以 API 24 (Nougat) 或以后级别为目标的应用程序请求则会失败。
在 Android P 中,咱们计划彻底移除 Crypto 提供程序。在移除后,全部对 SecureRandom.getInstance("SHA1PRNG", "Crypto") 的调用都会抛出 NoSuchProviderException。
请你们对本身的应用进行相应更新。