为了账号安全,请及时绑定邮箱和手机立即绑定

Java - 使用 ECDSA(椭圆曲线)创建 XML 数字签名

Java - 使用 ECDSA(椭圆曲线)创建 XML 数字签名

jeck猫 2021-08-04 17:45:43
我们可以使用 RSA 密钥创建 XML 数字签名。但是如何使用椭圆曲线密钥来签署 xml 文件?我收到错误消息,例如 -Exception in thread "main" java.security.KeyException: ECKeyValue not supported    at org.jcp.xml.dsig.internal.dom.DOMKeyValue$EC.<init>(DOMKeyValue.java:350)    at org.jcp.xml.dsig.internal.dom.DOMKeyInfoFactory.newKeyValue(DOMKeyInfoFactory.java:71)    at csr.ExtractEC.main(XMLSignatureECTest.java:57)Caused by: java.lang.ClassNotFoundException: sun/security/ec/ECParameters    at java.lang.Class.forName0(Native Method)    at java.lang.Class.forName(Class.java:264)    at org.jcp.xml.dsig.internal.dom.DOMKeyValue$EC.getMethods(DOMKeyValue.java:367)    at org.jcp.xml.dsig.internal.dom.DOMKeyValue$EC$1.run(DOMKeyValue.java:343)    at org.jcp.xml.dsig.internal.dom.DOMKeyValue$EC$1.run(DOMKeyValue.java:339)    at java.security.AccessController.doPrivileged(Native Method)    at org.jcp.xml.dsig.internal.dom.DOMKeyValue$EC.<init>(DOMKeyValue.java:338)    ... 2 more我使用下面的代码来创建 SignatureMethod 和 KeyInfo -String url = "http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256";        SignatureMethod signatureMethod = factory.newSignatureMethod(url, null);        SignedInfo signedInfo = factory.newSignedInfo(c14n, signatureMethod, Collections.singletonList(reference));        PrivateKey privateKey = Utils.generatePrivateEC("e:\\certs\\ec\\ec.key.p8");        Certificate certificate = Utils.generatePublic("e:\\certs\\ec\\ec.cer");        KeyInfoFactory keyInfoFactory = factory.getKeyInfoFactory();        KeyValue keyValue = keyInfoFactory.newKeyValue(certificate.getPublicKey());        KeyInfo keyInfo = keyInfoFactory.newKeyInfo(Collections.singletonList(keyValue));JDK - Oracle JDK 8 安全提供程序 - BouncyCastle 和 Sun。
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

这个junit测试中似乎有人为你做一个例子。


查看完整回答
反对 回复 2021-08-04
  • 1 回答
  • 0 关注
  • 219 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信