没有这样的算法:供应商BC的ECDSA

时间:2017-11-30 03:51:28

标签: android bouncycastle

我的应用是minSDK 15 - 所以我想我可以直接使用BouncyCastle。不幸的是我收到NoSuchAlgorithmException。我必须使用SpongyCastle吗? lib在JVM应用程序中运行良好 - 但在android上失败。

 Caused by: java.security.NoSuchAlgorithmException: no such algorithm: ECDSA for provider BC
    at sun.security.jca.GetInstance.getService(GetInstance.java:87)
    at sun.security.jca.GetInstance.getInstance(GetInstance.java:206)
    at java.security.KeyPairGenerator.getInstance(KeyPairGenerator.java:307)
    at org.kethereum.crypto.Keys.createSecp256k1KeyPair$crypto(Keys.kt:43)
    at org.kethereum.crypto.Keys.createEcKeyPair(Keys.kt:51)
    at org.walleth.data.keystore.KethereumWallethKeyStore.newAddress(KethereumWallethKeyStore.kt:43)
    at org.walleth.activities.CreateAccountActivity$onCreate$4.onClick(CreateAccountActivity.kt:95)
    at android.view.View.performClick(View.java:6256)
    at android.view.View$PerformClick.run(View.java:24701)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)

1 个答案:

答案 0 :(得分:4)

自4.0版以来,使用Bouncycastle(v1.46)作为默认加密提供程序,引入了对ECDSA的Android支持。请参阅博客https://nelenkov.blogspot.com.es/2011/12/using-ecdh-on-android.html?m=1

但是Android包含缩短版的Bouncycastle,而且没有完全支持ECDSA。您可以在链接中看到不支持算法KeyPairGenerator/ECDSA,这是生成以太坊密钥所必需的算法。

您不能直接包含bouncycastle库,因为与包名org.bouncycastle存在冲突。我建议在你的项目中加入spongycastle,它是Android org.spongycastle的bouncycastle的重新打包版本。

新的Android版本已经解决了包名冲突,但如果您的目标是旧版本,那么您需要确保使用哪个加密提供程序。