我需要在JAVA中对我的

XML消息进行数字签名:

生成的XML签名应具有以下格式:

DsP5NLca+plhp9tZvGwykfb2whQYt3CQ5sbsVd9Q9aE=

LrfE0po3YPvVxB/m77iBWWiR07Ghiuhuj7tO2C2LKqZK2cLrAiidt+3tjbJ3m16quCFxfh7bmjRtJsGi7a3HKtK

qY4auqrjNB62AtYrxvm+7Qd/cRacom4e3M9uF9JD1zTfoGun9w4WDfDrDaoZ+ZwUgNtf6sTYO5Ctcj5sYcD0=

7D665C81ABBE1A7D0E525BFC171F04D276F07BF2

任何人都可以提供一些代码帮助?

编辑:

我想出了这段代码:

private static Document sign(Document doc) throws InstantiationException, IllegalAccessException, ClassNotFoundException,

NoSuchAlgorithmException, InvalidAlgorithmParameterException, KeyException, MarshalException, XMLSignatureException,

FileNotFoundException, TransformerException {

String providerName = System.getProperty("jsr105Provider", "org.jcp.xml.dsig.internal.dom.XMLDSigRI");

XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", (Provider) Class.forName(providerName).newInstance());

Reference ref = fac.newReference("", fac.newDigestMethod(DigestMethod.SHA256, null));

// Create the SignedInfo

SignedInfo si = fac.newSignedInfo(

fac.newCanonicalizationMethod(CanonicalizationMethod.EXCLUSIVE, (C14NMethodParameterSpec) null),

fac.newSignatureMethod(SignatureMethod.RSA_SHA1, null), Collections.singletonList(ref));

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");

kpg.initialize(512);

KeyPair kp = kpg.generateKeyPair();

KeyInfoFactory kif = fac.getKeyInfoFactory();

KeyValue kv = kif.newKeyValue(kp.getPublic());

KeyInfo ki = kif.newKeyInfo(Collections.singletonList(kv));

DOMSignContext dsc = new DOMSignContext(kp.getPrivate(), doc.getDocumentElement());

XMLSignature signature = fac.newXMLSignature(si, ki);

signature.sign(dsc);

TransformerFactory tf = TransformerFactory.newInstance();

Transformer trans = tf.newTransformer();

trans.transform(new DOMSource(doc), new StreamResult(new FileOutputStream("mySignedFile")));

return doc;

}

但问题是我得到了:

并不是 :

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐