java山东单一窗口报文加签
写这玩意死了一片脑细胞,刚刚报文生成成功,有帮到你请点个赞,直接上代码。
//创建Reference
XMLSignatureFactory fac = XMLSignatureFactory.getInstance();
Transform envelopedTransform =
fac.newTransform(Transform.ENVELOPED, (TransformParameterSpec)null);
DigestMethod sha1DigMethod = fac.newDigestMethod(DigestMethod.SHA1, null);
Reference refToRootDoc = fac.newReference("", sha1DigMethod,
Collections.singletonList(envelopedTransform), null, null);
//创建SignedInfo
CanonicalizationMethod c14nWithCommentMethod =
fac.newCanonicalizationMethod(
CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS,
(C14NMethodParameterSpec) null);
SignatureMethod dsa_sha1SigMethod =
fac.newSignatureMethod(SignatureMethod.RSA_SHA1, null);
SignedInfo signedInfo =
fac.newSignedInfo(c14nWithCommentMethod,
dsa_sha1SigMethod,
Collections.singletonList(refToRootDoc));
KeyPairGenerator kpGen = KeyPairGenerator.getInstance("RSA");
kpGen.initialize(1024);
KeyPair keyPair = kpGen.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
FileInputStream fis = new FileInputStream("F://014d89d7.cer");
BufferedInputStream bis = new BufferedInputStream(fis);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
while (bis.available() > 0) {
Certificate cert = cf.generateCertificate(bis);
System.out.println(cert.toString());
KeyInfoFactory kfac = KeyInfoFactory.getInstance();
X509Data X509 = kfac.newX509Data(Collections.singletonList(cert));
KeyName keyName = kfac.newKeyName("014d89d7");
List<Object> klist = new ArrayList();
klist.add(X509);
klist.add(keyName);
KeyInfo keyInfo = kfac.newKeyInfo(klist);;
XMLSignature signature = fac.newXMLSignature(signedInfo, keyInfo);
org.w3c.dom.Document doc = parse(document);
DOMSignContext dsc = new DOMSignContext(privateKey, doc.getDocumentElement());
signature.sign(dsc);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
DOMSource source=new DOMSource(doc);
transformer.transform(source, new StreamResult(System.out));
StreamResult result = new StreamResult(new File("F:\\old.xml"));
transformer.transform(source,result);
}