【问题标题】:no such algorithm: ECDSA for provider BC没有这样的算法:提供者 BC 的 ECDSA
【发布时间】:2017-11-30 03:51:28
【问题描述】:

我的应用是 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$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)

【问题讨论】:

    标签: android bouncycastle


    【解决方案1】:

    从 4.0 版开始引入了对 ECDSA 的 Android 支持,使用 Bouncycastle (v1.46) 作为默认加密提供程序。见博客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 版本中解决,但如果您的目标是旧版本,则需要确保使用的是哪个加密提供程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多