Bouncy Castle 提供程序在标准 java 中工作时抛出 NoSuchAlgorithmException
Bouncy Castle provider throws NoSuchAlgorithmException while works in standard java
我正在尝试在 android 中实现带有 jwt 身份验证的 box-java-sdk。当 sdk 尝试解密这些行中的私钥时:
InputDecryptorProvider pkcs8Prov = new JceOpenSSLPKCS8DecryptorProviderBuilder().setProvider("BC")
.build(this.privateKeyPassword.toCharArray());
PrivateKeyInfo keyInfo = ((PKCS8EncryptedPrivateKeyInfo) keyPair).decryptPrivateKeyInfo(pkcs8Prov);
decryptedPrivateKey = (new JcaPEMKeyConverter()).getPrivateKey(keyInfo);
发生以下异常:
W/System.err: com.box.sdk.BoxAPIException: Error parsing PKCS private key for Box Developer Edition.
W/System.err: at com.box.sdk.BoxDeveloperEditionAPIConnection.decryptPrivateKey(BoxDeveloperEditionAPIConnection.java:516)
W/System.err: at com.box.sdk.BoxDeveloperEditionAPIConnection.constructJWTAssertion(BoxDeveloperEditionAPIConnection.java:450)
W/System.err: at com.box.sdk.BoxDeveloperEditionAPIConnection.constructJWTAssertion(BoxDeveloperEditionAPIConnection.java:431)
W/System.err: at com.box.sdk.BoxDeveloperEditionAPIConnection.authenticate(BoxDeveloperEditionAPIConnection.java:320)
W/System.err: at com.box.sdk.BoxDeveloperEditionAPIConnection.tryRestoreUsingAccessTokenCache(BoxDeveloperEditionAPIConnection.java:419)
W/System.err: at com.box.sdk.BoxDeveloperEditionAPIConnection.getAppUserConnection(BoxDeveloperEditionAPIConnection.java:271)
W/System.err: at com.box.sdk.BoxDeveloperEditionAPIConnection.getAppUserConnection(BoxDeveloperEditionAPIConnection.java:296)
W/System.err: at com.kapalya.box.BoxClient.inBackgroud(BoxClient.java:41)
W/System.err: at com.kapalya.box.BoxClient.doInBackground(BoxClient.java:111)
W/System.err: at com.kapalya.box.BoxClient.doInBackground(BoxClient.java:107)
W/System.err: at android.os.AsyncTask.call(AsyncTask.java:295)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:234)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
W/System.err: at java.lang.Thread.run(Thread.java:818)
W/System.err: Caused by: org.bouncycastle.pkcs.PKCSException: unable to read encrypted data: 1.2.840.113549.1.5.13 not available: Provider BC does not provide 1.2.840.113549.3.7
W/System.err: at org.bouncycastle.pkcs.PKCS8EncryptedPrivateKeyInfo.decryptPrivateKeyInfo(Unknown Source)
W/System.err: at com.box.sdk.BoxDeveloperEditionAPIConnection.decryptPrivateKey(BoxDeveloperEditionAPIConnection.java:505)
W/System.err: ... 15 more
W/System.err: Caused by: org.bouncycastle.operator.OperatorCreationException: 1.2.840.113549.1.5.13 not available: Provider BC does not provide 1.2.840.113549.3.7
W/System.err: at org.bouncycastle.openssl.jcajce.JceOpenSSLPKCS8DecryptorProviderBuilder.get(Unknown Source)
W/System.err: ... 17 more
W/System.err: Caused by: java.security.NoSuchAlgorithmException: Provider BC does not provide 1.2.840.113549.3.7
W/System.err: at javax.crypto.Cipher.getCipher(Cipher.java:357)
W/System.err: at javax.crypto.Cipher.getInstance(Cipher.java:325)
W/System.err: at javax.crypto.Cipher.getInstance(Cipher.java:297)
W/System.err: at org.bouncycastle.jcajce.util.NamedJcaJceHelper.createCipher(Unknown Source)
W/System.err: ... 18 more
虽然此 sdk 在标准 java 应用程序中运行良好。 android 对 BountyCastle 提供程序的实施是否有任何变化?这个问题有解决方法吗?
通过首先删除 android BountyCastle 的实现使其工作:
Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME);
所以注册 BouncyCastleProvider 的静态块变为:
static {
Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME);
Security.addProvider(new BouncyCastleProvider());
}
我正在尝试在 android 中实现带有 jwt 身份验证的 box-java-sdk。当 sdk 尝试解密这些行中的私钥时:
InputDecryptorProvider pkcs8Prov = new JceOpenSSLPKCS8DecryptorProviderBuilder().setProvider("BC")
.build(this.privateKeyPassword.toCharArray());
PrivateKeyInfo keyInfo = ((PKCS8EncryptedPrivateKeyInfo) keyPair).decryptPrivateKeyInfo(pkcs8Prov);
decryptedPrivateKey = (new JcaPEMKeyConverter()).getPrivateKey(keyInfo);
发生以下异常:
W/System.err: com.box.sdk.BoxAPIException: Error parsing PKCS private key for Box Developer Edition.
W/System.err: at com.box.sdk.BoxDeveloperEditionAPIConnection.decryptPrivateKey(BoxDeveloperEditionAPIConnection.java:516)
W/System.err: at com.box.sdk.BoxDeveloperEditionAPIConnection.constructJWTAssertion(BoxDeveloperEditionAPIConnection.java:450)
W/System.err: at com.box.sdk.BoxDeveloperEditionAPIConnection.constructJWTAssertion(BoxDeveloperEditionAPIConnection.java:431)
W/System.err: at com.box.sdk.BoxDeveloperEditionAPIConnection.authenticate(BoxDeveloperEditionAPIConnection.java:320)
W/System.err: at com.box.sdk.BoxDeveloperEditionAPIConnection.tryRestoreUsingAccessTokenCache(BoxDeveloperEditionAPIConnection.java:419)
W/System.err: at com.box.sdk.BoxDeveloperEditionAPIConnection.getAppUserConnection(BoxDeveloperEditionAPIConnection.java:271)
W/System.err: at com.box.sdk.BoxDeveloperEditionAPIConnection.getAppUserConnection(BoxDeveloperEditionAPIConnection.java:296)
W/System.err: at com.kapalya.box.BoxClient.inBackgroud(BoxClient.java:41)
W/System.err: at com.kapalya.box.BoxClient.doInBackground(BoxClient.java:111)
W/System.err: at com.kapalya.box.BoxClient.doInBackground(BoxClient.java:107)
W/System.err: at android.os.AsyncTask.call(AsyncTask.java:295)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:234)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
W/System.err: at java.lang.Thread.run(Thread.java:818)
W/System.err: Caused by: org.bouncycastle.pkcs.PKCSException: unable to read encrypted data: 1.2.840.113549.1.5.13 not available: Provider BC does not provide 1.2.840.113549.3.7
W/System.err: at org.bouncycastle.pkcs.PKCS8EncryptedPrivateKeyInfo.decryptPrivateKeyInfo(Unknown Source)
W/System.err: at com.box.sdk.BoxDeveloperEditionAPIConnection.decryptPrivateKey(BoxDeveloperEditionAPIConnection.java:505)
W/System.err: ... 15 more
W/System.err: Caused by: org.bouncycastle.operator.OperatorCreationException: 1.2.840.113549.1.5.13 not available: Provider BC does not provide 1.2.840.113549.3.7
W/System.err: at org.bouncycastle.openssl.jcajce.JceOpenSSLPKCS8DecryptorProviderBuilder.get(Unknown Source)
W/System.err: ... 17 more
W/System.err: Caused by: java.security.NoSuchAlgorithmException: Provider BC does not provide 1.2.840.113549.3.7
W/System.err: at javax.crypto.Cipher.getCipher(Cipher.java:357)
W/System.err: at javax.crypto.Cipher.getInstance(Cipher.java:325)
W/System.err: at javax.crypto.Cipher.getInstance(Cipher.java:297)
W/System.err: at org.bouncycastle.jcajce.util.NamedJcaJceHelper.createCipher(Unknown Source)
W/System.err: ... 18 more
虽然此 sdk 在标准 java 应用程序中运行良好。 android 对 BountyCastle 提供程序的实施是否有任何变化?这个问题有解决方法吗?
通过首先删除 android BountyCastle 的实现使其工作:
Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME);
所以注册 BouncyCastleProvider 的静态块变为:
static {
Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME);
Security.addProvider(new BouncyCastleProvider());
}