ECDSA KeyPairGenerator 不可用(但在 JUnit 中有效)

2024-04-28

我遇到了运行 Android 应用程序时观察到的异常 - 当我将下面的代码作为 JUnit 运行时,它不会发生。

java.security.NoSuchAlgorithmException: ECDSA KeyPairGenerator not available
    at java.security.KeyPairGenerator.getInstance(KeyPairGenerator.java:225)
    at com.mhamdaoui.smartcardreader.CryptoUtils$Companion.getMerchantEphemeralPublicKey(CryptoUtils.kt:48)
    at com.mhamdaoui.smartcardreader.MainActivity.onTagDiscovered(MainActivity.kt:80)
    at android.nfc.NfcActivityManager.onTagDiscovered(NfcActivityManager.java:603)
    at android.nfc.IAppCallback$Stub.onTransact(IAppCallback.java:83)
    at android.os.Binder.execTransact(Binder.java:573)

代码:

  Security.addProvider(BouncyCastleProvider())
  val generator = KeyPairGenerator.getInstance("ECDSA")
  val ecSpec = ECNamedCurveTable.getParameterSpec("secp256r1")
  generator.initialize(ecSpec)
  val keyPair = generator.generateKeyPair()
  val publicKey = keyPair.public as ECPublicKey
  return publicKey.q.getEncoded(true)

如何解决这个问题?

UPDATE

当我在测试中创建 JUnit 时(我使用的是 Android Studio):

@Test
fun compressedGeneratorTest() {
  Security.addProvider(BouncyCastleProvider())
  val generator = KeyPairGenerator.getInstance("ECDSA")
  val ecSpec = ECNamedCurveTable.getParameterSpec("secp256r1")
  generator.initialize(ecSpec)
  val keyPair = generator.generateKeyPair()
  val publicKey = keyPair.public as ECPublicKey
  val encoded = publicKey.q.getEncoded(true)
  assert(true)
}

一切也都有效。如何解决App运行时的这个问题?


问题是无法在 Android 上使用 BounceyCastle - 而是使用 SpongyCastle:

implementation 'com.madgag.spongycastle:prov:1.54.0.0'
implementation 'com.madgag.spongycastle:pkix:1.54.0.0'

然后使用 BouncyCastleProvider 实例初始化提供程序,如下所示:

Security.addProvider(new org.spongycastle.jce.provider.BouncyCastleProvider())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ECDSA KeyPairGenerator 不可用(但在 JUnit 中有效) 的相关文章

随机推荐

  • 如何让一个不可见的透明按钮起作用?

    查看 Unity 论坛和问答网站中的一些答案 如何制作隐形按钮的答案不起作用 因为删除与按钮关联的图像会使其不起作用 如何解决这个问题并保持不可见属性 同时允许按钮实际工作 这是 Unity 的怪异之处之一 100 的现实世界项目都需要这个
  • 如何转换 R 中列匹配模式中的值

    我有这个数据框mydf 专栏nucleotide可以有A T G C字母 我想更改字母A to T C to G G to C and T to A 如果strand列是 我该怎么做 mydf lt structure list seqna
  • 使用详细信息和摘要标签作为可折叠内联元素

    我正在努力研究这个问题的解决方案 找到一种方法来实现可折叠按钮 或其他类似对象 这样 它们可以在同一行中使用 单击时 其内容显示在按钮所在行和下一行之间 他们反应敏捷 内容的样式独立于标题 我制作这个 gif 是为了更好地了解我想要获得什么
  • 使用 CSS 检查滚动

    我正在尝试创建一个纯 100 CSS 无 jQuery 返回顶部 按钮 但我希 望该按钮仅在访问者向下滚动页面时显示 是否可以用 CSS 来检查这一点 因此 如果访问者向下滚动一点 则会显示 返回顶部 按钮 Thanks 根据光标位置确定
  • Entity Framework 4.1+ 多对多关系更改跟踪

    如何检测 ICollection 属性的更改 多对多关系 public class Company public virtual ICollection
  • 如何在 Excel VBA 中将 UTF-8 转换为 UTF-16?

    据我所知 Excel使用UTF 16来表示字符串文字 我从控制台 Mac 文件 Windows 读取数据 在这两种情况下 字符编码都是混乱的 我必须找到一个适用于两个平台的解决方案 因此 ADO 流不是一个选项 我进行了一些调试 发现实际字
  • 如何在 python 中 unpickle 托管在 Web URL 中的文件

    pickle 和 unpickle 对象的正常方法如下 腌制一个对象 import cloudpickle as cp cp dump objects open picklefile pkl wb UnPickle 一个对象 加载腌制文件
  • 如何检查 JQuery select 中是否已存在选项

    如何检查 JQuery 的 select 中是否已存在选项 我想动态地将选项添加到 select 中 因此我需要检查该选项是否已经存在以防止重复 如果它已经存在 则评估结果为 true yourSelect option value you
  • 如何自定义锁定屏幕?就像 Android 中的 WaveSecure

    我想做一个像 WaveSecure 一样的演示 它以第三名的成绩赢得了 Android Develop Challenge 2 现在我在自定义锁定屏幕时遇到了问题 所以我想知道WaveSecure是如何实现其锁定功能的 如下图所示 当手机锁
  • 如何在 NSData 中打包结构体? [复制]

    这个问题在这里已经有答案了 可能的重复 通过 GameKit 发送和接收 NSData https stackoverflow com questions 4837102 send and receive nsdata via gameki
  • 我可以简化同一专用网络上计算机的 WebRTC 信号传输吗?

    WebRTC 信号让我发疯 我的用例非常简单 信息亭和控制室网络应用程序之间的双向音频对讲 两台计算机都在同一网络上 两者都无法访问互联网 所有机器都有已知的静态 IP 我读到的所有内容都希望我使用 STUN TURN ICE 服务器 这个
  • 过滤等于或大于某个值的数据的函数

    我有一个包含数千行和列的数据框 行包含基因名称 列包含样本名称 我只想保留 3 个以上样本中包含等于或大于 5 的值的行 到目前为止我已经尝试过 但我不知道如何设置多个条件 data frame1 gt filter all all var
  • 如何在 Java 中将字符串(IP 数字)转换为整数

    例子 using Integer parseInt int i Integer parseInt 123 你会如何做同样的事情 using Integer parseInt int i Integer parseInt 123 45 55
  • 语法分析和语义分析有什么区别?

    据我了解 Parser由词法分析 句法分析和语义分析三个阶段组成 Lexical 它将我的输入分割成标记 例子 123 100 0 gt 123 100 0 语法 它将研究标记并检查它们是否彼此有意义 我遇到的问题是理解最后阶段的 语义解析
  • 使用组合框过滤文本框

    好吧 我必须创建一个表单 它获取文件夹的内容并将其列出在文本框中 是的 文本框不是列表框 然后 我必须使用包含文件夹所有扩展名的组合框来过滤此文本框 例如 如果我在组合框中选择 txt 则文本框应过滤以仅显示所有文本文件 除了让组合框过滤文
  • 在嵌入式 Python 解释器中打印变量

    我编写了一个嵌入 Python 的小型 C 程序 我使用 Py Initialize 和 Py Finalize 正确设置它 并且能够使用 PyRun SimpleString 或 PyRun SimpleFile 运行脚本 但是 我不知道
  • 禁用浏览器状态栏文本

    背景 现代浏览器取消了经典的状态栏 而是在窗口底部绘制一个小工具提示 在悬停 焦点时显示链接目标 下面的屏幕截图说明了这种行为的示例 在我的例子中是不需要的 问题 有没有一种可移植的方法来禁用这些工具提示 在我的特殊情况下 我是否遗漏了这样
  • iOS 触觉反馈未触发

    我正在使用一些 UIGestures 特别是强制触摸 我已经完成了所有这些工作 额外的 UI 更新 动画都可以根据强制触摸进行工作 不过 我想添加硬压机上的触觉反馈 令我沮丧的是 这段代码不起作用 该函数已调用 界面已更新 但没有触觉反馈
  • “类型错误:无法将 'int' 隐式转换为 str”是什么意思?

    def display positive indices strlen print print end for i in range strlen 1 print i end if i strlen print 4 len str i en
  • ECDSA KeyPairGenerator 不可用(但在 JUnit 中有效)

    我遇到了运行 Android 应用程序时观察到的异常 当我将下面的代码作为 JUnit 运行时 它不会发生 java security NoSuchAlgorithmException ECDSA KeyPairGenerator not