似乎“加密”提供程序已在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
答案 0 :(得分:4)
引用Google:
“Crypto”安全提供程序已被删除。只有当提供程序包含在APK的代码中或能够处理它的缺席时,才应该对列出了提供程序的Java密码术扩展(JCE)API进行任何调用。应用程序使用此提供程序的原因是利用其SecureRandom实现。如果您的应用程序依赖于setSeed()从字符串派生键,则应切换到使用SecretKeySpec直接加载原始键字节或 使用真正的密钥派生函数(KDF)。
因此,这是按预期工作的。
如果我更改提供者和算法,那么它将影响当前正在使用该应用程序的用户。
您似乎只在生成随机数时使用该提供程序。因此,如果我理解正确的话,切换到不同的随机数生成器,并按照Google的说明操作,这不应该影响现有用户。
而且,如果我误解了你如何使用Crypto
(因为我很少直接使用JCE),请开发一个迁移路径,将应用程序的现有用户升级到其他算法。 Android N不应该以生产形式发布另外几个月,即便如此,它也将是一个缓慢的发展。