【问题标题】:Security "Crypto" provider deprecated in Android NAndroid N 中已弃用安全“加密”提供程序
【发布时间】:2016-08-23 09:14:53
【问题描述】:

一位用户在 Android N 中运行我的应用程序时发生了崩溃。我知道 Google 已在 Android N 中弃用 Crypto 提供程序,但迁移旧加密数据的最佳方法是什么。

【问题讨论】:

    标签: android


    【解决方案1】:

    8.0及以上可以参考 here

    8.0以下的版本可以通过以下代码。

    您可以使用此提供程序替换 SecureRandom 的“加密”,它对我来说很好:

    使用,

    SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", new CryptoProvider());
    

    而不是,

    SecureRandom sr = SecureRandom.getInstance("SHA1PRNG","Crypto");
    

    你的 CryptoProvider 类如下所示,

    import java.security.Provider;
    /**
     * Implementation of Provider for SecureRandom. The implementation     supports the
     * "SHA1PRNG" algorithm described in JavaTM Cryptography Architecture, API
     * Specification & Reference
    */
    public final class CryptoProvider extends Provider {
        /**
     * Creates a Provider and puts parameters
     */
    public CryptoProvider() {
        super("Crypto", 1.0, "HARMONY (SHA1 digest; SecureRandom; SHA1withDSA signature)");
        put("SecureRandom.SHA1PRNG",
                "org.apache.harmony.security.provider.crypto.SHA1PRNG_SecureRandomImpl");
        put("SecureRandom.SHA1PRNG ImplementedIn", "Software");
    }
    }
    

    【讨论】:

    • 我正在使用这种方法。但是,当我尝试用旧方法解密已经加密的数据时,我的应用程序崩溃了。有什么解决方案可以缓解这个问题?
    • @Amrut 我面临同样的问题。你能帮助我吗?你找到这个的解决方案了吗
    • 加密提供程序在 Android P 中已完全删除。如果我们使用上述解决方案,我们将遇到异常 - java.security.NoSuchAlgorithmException:为 SecureRandom 配置的类(提供程序:加密)不能找到了。
    • 我已经在 Android P 中遇到了这个问题。有解决这个问题的办法吗?
    • 你好@PraveenKumarVerma 请参考我建议的链接到编辑后的答案,它可以帮助你解决Android P的问题。
    【解决方案2】:

    您可以将此代码用于提供者:

    SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1").getProvider();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 2013-06-13
      • 2013-10-27
      • 2021-09-18
      • 2018-08-22
      • 2019-05-14
      相关资源
      最近更新 更多