为什么3是Android platform.key唯一接受的公共指数?

为什么3是Android platform.key唯一接受的公共指数?,android,rsa,Android,Rsa,我正在构建一个安卓系统 我有一个现有的密钥对,具有一个公共指数F4(65537) 我尝试将其用作platform.key(我有pk8和x509) 在构建过程中,对我的密钥对调用DumpPublicKey 此时,密钥被拒绝,因为公共指数不是3。(我检查了DumpPublicKey的代码,它就是这样做的:与3比较,否则拒绝) 以下是此项的堆栈跟踪: java.lang.Exception: Public exponent should be 3 but is 65537. at com.an

我正在构建一个安卓系统

我有一个现有的密钥对,具有一个公共指数F4(65537)

我尝试将其用作platform.key(我有pk8和x509)

在构建过程中,对我的密钥对调用DumpPublicKey

此时,密钥被拒绝,因为公共指数不是3。(我检查了DumpPublicKey的代码,它就是这样做的:与3比较,否则拒绝)

以下是此项的堆栈跟踪:

java.lang.Exception: Public exponent should be 3 but is 65537.
    at com.android.dumpkey.DumpPublicKey.check(DumpPublicKey.java:75)
    at com.android.dumpkey.DumpPublicKey.main(DumpPublicKey.java:151)
这是否意味着我必须使用

openssl genrsa -3 ...
或者我还能用钥匙吗

还有,为什么公众指数是3而不是F4如此重要


提前感谢

对我来说,com.android.dumpkey.DumpPublicKey中似乎有个bug。 将RSA密钥的公共指数限制为3显然是愚蠢的。 这样做只会使实施错误更有可能产生负面影响, 如果基础库没有正确实现

据我所知,Android使用Bouncycastle,这是一个加密库 没有认真执行

像您这样使用标准指数2^16+1是非常合理的,可以避免许多潜在的错误
小指数的问题。

使用3而不是65537可以使签名验证速度快8倍。谢谢GregS。这就是我的想法。你现在知道是否有办法让android接受我的密钥吗?对不起,我对android不太了解。我删除了DumpPublicKey中的异常部分,它似乎可以工作(到目前为止)