我进行“签名”操作并具有以下代码:
KeyStore.PrivateKeyEntry privateKeyEntry =
(KeyStore.PrivateKeyEntry)keyStore.getEntry(keyAlias, null);
PrivateKey privateKey = privateKeyEntry.getPrivateKey();
signature = Signature.getInstance("NONEwithRSA");
signature.initSign(privateKey);
signature.update(data);
执行上述操作后,我得到以下异常:
05-29 17:33:36.106 W/System.err( 4478): java.security.InvalidKeyException: Supplied key (android.security.keystore.AndroidKeyStoreRSAPrivateKey) is not a RSAPrivateKey instance
05-29 17:33:36.107 W/System.err( 4478): at org.spongycastle.jcajce.provider.asymmetric.rsa.DigestSignatureSpi.engineInitSign(DigestSignatureSpi.java:92)
05-29 17:33:36.107 W/System.err( 4478): at java.security.Signature$Delegate.init(Signature.java:1208)
05-29 17:33:36.107 W/System.err( 4478): at java.security.Signature$Delegate.chooseProvider(Signature.java:1167)
05-29 17:33:36.107 W/System.err( 4478): at java.security.Signature$Delegate.engineInitSign(Signature.java:1232)
05-29 17:33:36.107 W/System.err( 4478): at java.security.Signature.initSign(Signature.java:607)
05-29 17:33:36.107 W/System.err( 4478): at com.example.TestClass.sign(TestClass.java:289)
我还在同一个类中使用 Spongy Castle 库,因为我需要它用于其他目的,因此我在静态块中有以下内容:
Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
这里有什么问题?我已经阅读了 StackOverflow 上所有具有相似性质的线程,解决方案始终是在对 Cipher 进行初始化时不使用特定的提供程序(我不这样做)并且不将密钥转换为 RSAPrivateKey(我不这样做!)。
这是否与 Spongy 注册为第一提供者有关?我没有任何想法。请分享