從 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。
請你們對本身的應用進行相應更新。