3

似乎“加密”提供程序已在 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: 没有这样的提供者: Crypto

4

1 回答 1

4

引用谷歌

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

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

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

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

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

于 2016-04-30T23:32:06.547 回答