android - 没有这样的算法: ECDSA for provider BC

标签 android bouncycastle

我的应用程序是 minSDK 15 - 所以我想我可以直接使用 BouncyCaSTLe。不幸的是我得到了一个N​​oSuchAlgorithmException。那我必须使用 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 自 4.0 版起引入了对 ECDSA 的支持,使用 BouncycaSTLe (v1.46) 作为默认加密提供程序。请参阅博客 https://nelenkov.blogspot.com.es/2011/12/using-ecdh-on-android.html?m=1

但 Android 包含 BouncycaSTLe 的缩短版本,并且不完全支持 ECDSA。您可以在链接中看到不支持算法 KeyPairGenerator/ECDSA,而这是生成以太坊 key 所需的算法。

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

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

关于android - 没有这样的算法: ECDSA for provider BC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47565574/

相关文章:

java - 无法加载 jar - "zip file is empty"

android - Galaxy S5 上的 camera2 问题

android - 根据哪个 Activity 包含 fragment 执行 Intent

java - Activity 类 {} 不存在 android 3.5.1(即时运行不再可用)

java - 使用 PGP 通过 javamail 发送加密邮件

c# - 如何从 AES-GCM 获取认证标签

android - Firebase 云消息传递的 AbstractMethodError

java - 如何使用谷歌应用程序引擎从数据存储中检索信息并使用java在Android应用程序的 ListView 中显示它?

Java 1.6_u45 + BouncyCaSTLe + TLS1.2 抛出握手失败(40)(notifySecureRenegotiation)

java - CipherInputStream 从不抛出异常