没有这样的算法:提供者 BC 的 ECDSA

no such algorithm: ECDSA for provider BC

我的应用程序是 minSDK 15 - 所以我想我可以直接使用 BouncyCastle。不幸的是我得到了一个 NoSuchAlgorithmException。那我必须使用 SpongyCastle 吗?该库在 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.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)

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

但是 Android 包含了 Bouncycastle 的简化版本,并且没有对 ECDSA 的完全支持。您可以在 link 中看到不支持算法 KeyPairGenerator/ECDSA,这是生成以太坊密钥所需的算法。

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

包名称冲突已在新 android 版本中解决,但如果您的目标是旧版本,则需要确保使用的是哪个加密提供程序。