【问题标题】:Caused by: java.security.NoSuchProviderException: no such provider: Crypto - Android N [duplicate]引起:java.security.NoSuchProviderException:没有这样的提供者:加密 - Android N [重复]
【发布时间】:2016-08-25 23:19:56
【问题描述】:

似乎“加密”提供程序已在 Android N 中删除。

我的应用程序因 NoSuchProviderException 而崩溃。

如果我更改提供程序和算法,那么它将影响当前正在使用该应用程序的用户。有人有想法吗?

KeyGenerator kGen = KeyGenerator.getInstance(KEY_GENERATOR_ALGORITHM);
SecureRandom sr = SecureRandom.getInstance(STR_SHA1PRNG, **CRYPTO**);
sr.setSeed(seed);
kGen.init(128, sr);
SecretKey sKey = kGen.generateKey();

04-30 04:07:02.872:E/AndroidRuntime(17386):原因:java.security.NoSuchProviderException:没有这样的提供者:加密

【问题讨论】:

    标签: android cryptography android-security android-securityexception


    【解决方案1】:

    引用Google:

    “加密”安全提供程序已被删除。仅当 APK 的代码中包含该提供程序或能够处理它的缺失时,才应该对列出了提供程序的 Java 加密扩展 (JCE) API 进行任何调用。应用程序使用此提供程序的原因是利用其 SecureRandom 实现。如果您的应用程序依赖 setSeed() 从字符串派生密钥,则应切换到使用 SecretKeySpec 直接加载原始密钥字节或 使用真正的密钥派生函数 (KDF)。

    因此,这是按预期工作的。

    如果我更改提供程序和算法,那么它将影响当前正在使用该应用程序的用户。

    您似乎只使用该提供程序来生成随机数。因此,切换到不同的随机数生成器,并按照 Google 的说明进行操作,如果我理解正确的话,这不会影响现有用户。

    而且,如果我误解了您如何使用 Crypto(因为我很少直接使用 JCE),请开发迁移路径以将您应用的现有用户升级到不同的算法。 Android N 不应该再过几个月以生产形式发布,即便如此,它的吸收速度也会很慢。

    【讨论】:

    • KeyGenerator kGen = KeyGenerator.getInstance("AES"); SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto"); sr.setSeed(种子); kGen.init(128, sr); // 192 和 256 位可能不可用 SecretKey sKey = kGen.generateKey();这就是我生成 SecretKey 的方式。
    • 最后一个问题,考虑我更改加密/解密逻辑并向所有现有用户推送应用更新。那么当我们尝试正确解密已经加密的数据时,应用程序会崩溃(Badpaddingexception)?有什么解决方案可以缓解这个问题?
    • @Ananth:“有什么办法可以缓解这个问题吗?” - 正如我所写,有一个迁移路径。尽快发布应用更新,使用旧方法解密并使用适用于 Android N 的新方法重新加密,适用于升级到此新应用版本的用户(与首次安装相比,您只需使用新版本)方法)。运气好的话,每个人都会在 Android N 发布之前收到更新。
    • 只是另一个问题...为了为用户提供向后兼容性和迁移旧的加密数据,我需要 SHA1PRNG_SecureRandomImpl。我在哪里可以得到它? 1. 在我的应用程序中嵌入实现会有任何版权问题? 2. 是否可以在我们的 gradle 中添加任何依赖项以使用实现 3. 或者任何可用的 jar 文件可以包含在我的应用程序中以用于下一个版本
    猜你喜欢
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2020-04-20
    • 2017-03-08
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多