当前位置: 首页 > 面试题库 >

如何将公共EC代码点和曲线名称转换为PublicKey?

郗学
2023-03-14
问题内容

我有两个32个字节长的字节数组,分别表示EC公共密钥的X和Y值。我知道曲线是命名曲线“ prime256v1”。

如何将其转换为Java PublicKey对象?

JCE似乎不提供使用命名曲线的任何便利。

Bouncycastle的示例代码似乎无法与我可以找到的任何版本的bouncycastle一起编译

WTF?


问题答案:

事实证明,实际上还有另一种方法可以做到这一点。显然,可以使用AlgorithmParameters类将具有命名曲线的ECGenParameterSpec转换为ECParameterSpec对象,可以将其与KeyFactory一起使用以生成PublicKey对象:

            ECPoint pubPoint = new ECPoint(new BigInteger(1, x),new BigInteger(1, y));
            AlgorithmParameters parameters = AlgorithmParameters.getInstance("EC", "SunEC");
            parameters.init(new ECGenParameterSpec("secp256r1"));
            ECParameterSpec ecParameters = parameters.getParameterSpec(ECParameterSpec.class);
            ECPublicKeySpec pubSpec = new ECPublicKeySpec(pubPoint, ecParameters);
            KeyFactory kf = KeyFactory.getInstance("EC");
            return (ECPublicKey)kf.generatePublic(pubSpec);


 类似资料:
  • 我正在努力从公钥的字符串表示创建ECDSA公钥,即 以前我发现我必须给这个键加上前缀' 04 ',所以不确定这次是否需要这样做? 我正在尝试生成它以用于验证签名 其中要签名的数据是 我现在的粗略代码如下 这是切碎在一起的,所以不能建造。任何帮助都很好 PS我在这里问了一个类似的关于私钥的问题给定曲线和私钥指数的ECDSA私钥的创建?

  • 问题内容: 我的数据采用以下格式:或类似。我想将它们转换为UTF-8(原始字符是好和我)。我该怎么做? 问题答案: 这可能是最简单的解决方案。

  • 问题内容: 我刚刚开始使用Java 8,并且正在使用以下代码片段: 如何将其转换为Lambda样式? 问题答案: 如果是 功能界面 ,则可以 这是您问题中其他类的存根实现的完整示例:

  • 我最近遇到了以下方法。我试着用谷歌搜索,并通过定义如下方法,做了一个例子来了解差异;两者似乎是一样的。但是,我需要知道它是否真的是一样的? 注意:在以上两种方法中,公共代码和抽象代码已经互换。

  • 我有一个复杂的要求,列表中记录有注释。我们有一个报告的功能,每个变化都应该被记录和报告。因此,根据我们的设计,即使单个字段已更新,我们也会创建一个全新的记录。 现在,我们希望将注释的历史记录(按时间戳反向排序)存储在数据库中。运行查询后,我得到了评论列表,但它包含重复的条目,因为其他一些字段被更改。它还包含空条目。 我编写了以下代码来删除重复和空条目。 这个逻辑工作正常,现在已经过测试了,但是我想

  • 问题内容: 我正在将Java库移植到C#。我使用的是Visual Studio 2008,因此没有停止使用的Microsoft Java语言转换助手程序(JLCA)。 我的方法是创建一个与Java库具有类似项目结构的新解决方案,然后将Java代码复制到ac#文件中,并将其逐行转换为有效的c#。考虑到我觉得Java易于阅读,两种语言之间的细微差别使我感到惊讶。 有些事情很容易移植(命名空间,继承等)