java.lang.IllegalArgumentException:字符串 curve25519 不是 OID bouncycastle 1.52

2024-04-17

我正在尝试使用曲线 25519 的 /java bouncy castle 1.52 实现生成密钥对,这给了我

java.lang.IllegalArgumentException:字符串 curve25519 不是 OID

这是我的代码:

public KeyPair generateKeys() throws NoSuchAlgorithmException,
        NoSuchProviderException, InvalidAlgorithmParameterException {
    ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("curve25519");
    KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC");
    g.initialize(ecSpec, new SecureRandom());

    return g.generateKeyPair();
}

这段代码的结果是下面的堆栈跟踪:

java.lang.IllegalArgumentException:字符串 curve25519 不是 OID 在 org.bouncycastle.asn1.ASN1ObjectIdentifier。(来源未知) 在 org.bouncycastle.jcajce.provider.asymmetry.ec.BCECPublicKey.getEncoded(来源未知) 在 org.bouncycastle.jcajce.provider.ametry.ec.BCECPrivateKey.getPublicKeyDetails(来源未知) 在 org.bouncycastle.jcajce.provider.ametry.ec.BCECPrivateKey。(来源未知) 在 org.bouncycastle.jcajce.provider.ametry.ec.KeyPairGeneratorSpi$EC.generateKeyPair(来源未知) 在 com.poc.databank.encryption.BouncyCastleEncryption.generateKeys(BouncyCastleEncryption.java:22) 在 com.poc.databank.encryption.BouncyCastleTest.testApp(BouncyCastleTest.java:16) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 在 org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 在 org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:309) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

我检查了充气城堡代码,发现 curve25519 在 CustomNamedCurves 类中注册为

defineCurve("curve25519", curve25519);

但不一样

defineCurveWithOID("secp192k1", SECObjectIdentifiers.secp192k1,
            secp192k1);

我明白,这应该是有原因的。请帮助我找到一种使用 curve25519 生成密钥对的方法。


您需要获取X9.62格式的曲线参数并将其转换为JCE格式

X9ECParameters ecP = CustomNamedCurves.getByName("curve25519");
ECParameterSpec ecSpec=new ECParameterSpec(ecP.getCurve(), ecP.getG(),
        ecP.getN(), ecP.getH(), ecP.getSeed());

然后正常生成 ECDSA 密钥

Provider bcProvider = new BouncyCastleProvider();
KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", bcProvider);
g.initialize(ecSpec, new SecureRandom());
KeyPair keyPair = g.generateKeyPair();
Assert.assertNotNull(keyPair);

我相信 curve25519 没有分配给它的对象标识符。但这可能并不能成为无法通过名称找到曲线的借口。

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

java.lang.IllegalArgumentException:字符串 curve25519 不是 OID bouncycastle 1.52 的相关文章

  • 如何检查给定路径是否可能是另一个路径的子路径?

    我正在尝试使用 java 查找给定路径是否可能是另一个路径的子路径 两条路径可能都不存在 Say c Program Files My Company test My App是一个可能的孩子c Program Files 目前我正在这样做
  • C++ 相当于 Java 的 System.arraycopy

    我正在尝试移植一些大量使用 System arraycopy 方法的 Java 代码 并想知道 C 中是否有等效的方法 基本上我想要有 n 个字节数组并将它们组合成一个大数组 每个初始数组的长度都可以是可变的 所以我不想经历计算结束数组长度
  • 如何指定嵌套属性的默认值?

    当我没有指定值时 以下代码会抛出 NPEacme security roles ConstructorBinding ConfigurationProperties acme public class AcmeProperties priv
  • Linkify 是否适用于 Android 中的 TextView?

    我有这段代码适用于调用 EditText 的方法 我尝试对 TextView 使用相同的代码 但它不起作用 文本不会像 EditText 那样变成超链接 有人知道为什么吗 public class MainActivity extends
  • 桌面应用程序的对象持久化策略

    我正在开发一个基于 Java 的桌面应用程序 我需要保留一些从应用程序对象模型生成的数据 最好保存到文件中 还需要保护持久文件 以便其他人无法从数据中获取对象模型详细信息 执行这些操作的最佳策略是什么 我的印象是这些要求对于桌面应用程序来说
  • Spring Autowire 在同一类中创建 Bean 会导致:请求的 bean 当前正在创建错误*

    我知道该错误是不言自明的 但是当我将其余模板的设置从构造函数删除为 Autowired Qualifier myRestTemplate private RestTemplate restTemplate 时 它 起作用了 只是想知道如果同
  • 使用 C# 计算 HMACSHA256 以匹配支付提供商示例

    对于支付提供商 我需要使用 HMAC SHA256 计算基于哈希的消息身份验证代码 这给我带来了很大的麻烦 支付提供商以伪代码形式给出了两个正确计算验证码的示例 所有密钥均为十六进制 Method 1 key 57617b5d2349434
  • Java 递增/递减运算符 - 它们的行为方式是什么,功能是什么?

    开始学习Java已经三天了 我有这个程序 但我不明白其中的代码main方法与 and 运营商 我什至不知道该怎么称呼他们 这些操作员的名字 谁能给我解释一下这是怎么回事 class Example public static void ma
  • 使用 lambda 内联过滤避免意外 null

    我有每个元素的列表 我想这样做 使用Java 8 disabledUsersOnLDAP stream forEach user gt usersRepository findEnabledByUsername user getUserNa
  • 从 JVM 线程本地空间卸载 Clojure 变量

    我正在 Clojure 中为 BaseX 编写一个插件 通过 lein uberjar 构建 并包含 Clojure 解释器 在大多数情况下 这效果很好 然而 当通过 BaseX HTTP 实例运行时 评估在 Jetty 的线程池内进行 而
  • 并发 log4j

    我有自己的日志引擎 它将日志写入带有阻塞队列的单独线程上 为了使用 标准软件 我正在考虑切换到 log4j 我不希望我的高并发软件因日志命令而变慢 这些日志命令在调用命令时将所有内容写入磁盘 log4j 可以用作垃圾箱吗 Log4j 是大多
  • 如何更改Spring-WS的“SOAP-ENV”默认前缀

    我使用 Spring WS 创建了一个 Web 服务 为了保持与旧系统的兼容性 我需要将命名空间前缀从SOAP ENV to soap 我知道SOAP ENV and soap只是命名空间前缀 只要它们引用正确的命名空间 http sche
  • Java正则表达式以数字和固定长度开头的字符串

    我制作了一个正则表达式来检查 String 的长度 所有字符都是数字并以数字开头 例如 123 以下是我的表情 REGEX 123 d 9 但它无法检查字符串的长度 它仅验证那些长度为 9 并以 123 开头的字符串 但如果我传递字符串 1
  • csharp类可以像java类一样“继承”xml文档吗?

    我正在向一些csharp代码添加注释 并且我正在使用 net 或其他东西 提供的xml语言 我有一个接口和一些实现类 我在界面中有一个方法 它有一个注释 在实现类中没有对实现方法进行注释 当人们在java中这样做时 javadoc在生成文档
  • 无法实例化类:org.jnp.interfaces.NamingContextFactory

    这是我的代码 扬声器远程 java package test import javax ejb Remote Remote public interface SpeakerRemote String sayAPhrase String ph
  • JDA Events 更新版本后停止工作 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个使用最新版本的 JDA 4 2 0 168 用 Ja va 开发的不和谐机器人 我的机器人中有几个事件 但只有一
  • 如何阻止TreeItem选择?

    我正在与一个TreeTableView JavaFX 8 有一些树节点必须禁用才能选择 我已经尝试过选择活动 但它不起作用 请查找以下代码以获取更多信息 treeTableView getSelectionModel selectedIte
  • 为什么我的 PlayFramework 应用程序出现很长的超时?

    我已经创建了一个工作应用程序 但有时当我更改内容并点击浏览器中的 重新加载 按钮时 该应用程序会永远超时 300000 毫秒或5分钟 之后我在浏览器中得到以下异常 java util concurrent TimeoutException
  • 使用外部属性文件执行 jar

    我有一个带有主类的 jar 可以像这样执行 java jar test jar 罐子里有类似的东西 public static void main String args throws IOException InputStream is
  • 有什么方法可以处理 HTTP/2 Goaway 在 HttpClient java 中收到的 IOException 吗?

    我在应用程序中进行 API 调用 在某个时候它会随机抛出java io IOException 149 222 1 1 553232 GOAWAY received 使用Java 11环境 无论如何要解决此异常而不是迁移到 Http 1 1

随机推荐