引起:java.security.NoSuchProviderException:没有这样的提供者:Crypto - Android N.

时间:2016-04-30 23:27:06

标签: android cryptography android-security android-securityexception

似乎“加密”提供程序已在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

1 个答案:

答案 0 :(得分:4)

引用Google

  

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

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

  

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

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

而且,如果我误解了你如何使用Crypto(因为我很少直接使用JCE),请开发一个迁移路径,将应用程序的现有用户升级到其他算法。 Android N不应该以生产形式发布另外几个月,即便如此,它也将是一个缓慢的发展。