首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓。未找到KeyFactory RSA实现

安卓。未找到KeyFactory RSA实现
EN

Stack Overflow用户
提问于 2012-04-19 14:50:04
回答 1查看 4.4K关注 0票数 3

我有一个扩展应用程序的类。在onCreate()方法中,我启动了一些线程,调用:

代码语言:javascript
复制
KeyFactory.getInstance("RSA")

通常情况下,它工作得很好,但有时(非常罕见)我会得到这样的例外:

代码语言:javascript
复制
W/System.err(24537): java.security.NoSuchAlgorithmException: KeyFactory RSA implementation not found
W/System.err(24537):    at org.apache.harmony.security.fortress.Engine.notFound(Engine.java:177)
W/System.err(24537):    at org.apache.harmony.security.fortress.Engine.getInstance(Engine.java:151)
W/System.err(24537):    at java.security.KeyFactory.getInstance(KeyFactory.java:81)

看上去像是一场比赛..。我认为安全系统目前还没有初始化,我的线程正在调用"RSA“。

这是众所周知的问题吗?有人能给我一些提示吗?

我在4.0.3设备上看到了这个问题(不知道其他版本)。

详细信息:

我试过这样的代码:

代码语言:javascript
复制
Provider providers[] = Security.getProviders();

try {
    k1 = KeyFactory.getInstance("RSA");
}
catch(Exception e) {
    e1 = e;
}

try {
    k2 = KeyFactory.getInstance("RSA", "BC");
}
catch(Exception e) {
    e2 = e;
}

try {
    k3 = KeyFactory.getInstance("RSA");
}
catch(Exception e) {
    e3 = e;
}

if(k1 == null || k2 == null || k3 == null) {
    if(e1 != null)
        e1.printStackTrace();

    if(e2 != null)
        e2.printStackTrace();

    if(e3 != null)
        e3.printStackTrace();
}

for(Provider provider : providers) {
    System.out.println(provider.getName());
}

这是我不时得到的:

代码语言:javascript
复制
k1 is null
k2 is <key>
k3 is null


e1.printStackTrace();

    04-20 22:09:33.322: W/System.err(17249): java.security.NoSuchAlgorithmException: KeyFactory RSA implementation not found
    04-20 22:09:33.322: W/System.err(17249):    at org.apache.harmony.security.fortress.Engine.notFound(Engine.java:177)
    04-20 22:09:33.322: W/System.err(17249):    at org.apache.harmony.security.fortress.Engine.getInstance(Engine.java:151)
    04-20 22:09:33.322: W/System.err(17249):    at java.security.KeyFactory.getInstance(KeyFactory.java:81)
    ...

e2 
    null

e3.printStackTrace();
    04-20 22:10:08.512: W/System.err(17249): java.security.NoSuchAlgorithmException: KeyFactory RSA implementation not found
    04-20 22:10:08.532: W/System.err(17249):    at org.apache.harmony.security.fortress.Engine.notFound(Engine.java:177)
    04-20 22:10:08.532: W/System.err(17249):    at org.apache.harmony.security.fortress.Engine.getInstance(Engine.java:151)
    04-20 22:10:08.542: W/System.err(17249):    at java.security.KeyFactory.getInstance(KeyFactory.java:81)
    ...


providers

    AndroidOpenSSL
    DRLCertFactory
    BC
    Crypto
    HarmonyJSSE
    MyProvider

大部分时间我都得到了k1,k2,k3初始化.

听起来像getInstance("RSA","BC")是一个解决方案(尽管我不明白为什么),但问题是BouncyCastle在某些安卓设备上可能会被遗漏(据我所知),所以我不应该在这个调用中指定"BC“.所以,我又遇到了一个问题。

EN

回答 1

Stack Overflow用户

发布于 2012-04-20 02:27:32

这是什么装置?这不是一场比赛,和谐提供商根本没有RSA实现。但是,BouncyCastle提供程序会这样做,因此它应该能够从那里获得它。尝试显式地指定提供程序名称:

代码语言:javascript
复制
KeyFactory kf = KeyFactory.getInstance("RSA", "BC");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10230714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档