<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FJDK_6%2FXML_Signature</id>
		<title>Java/JDK 6/XML Signature - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FJDK_6%2FXML_Signature"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/JDK_6/XML_Signature&amp;action=history"/>
		<updated>2026-05-14T10:36:03Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/JDK_6/XML_Signature&amp;diff=6371&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/JDK_6/XML_Signature&amp;diff=6371&amp;oldid=prev"/>
				<updated>2010-06-01T06:12:18Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:12, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/JDK_6/XML_Signature&amp;diff=6370&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/JDK_6/XML_Signature&amp;diff=6370&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:43Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Sign SOAP message ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
import java.security.KeyPair;&lt;br /&gt;
import java.security.KeyPairGenerator;&lt;br /&gt;
import java.security.PrivateKey;&lt;br /&gt;
import java.security.SecureRandom;&lt;br /&gt;
import java.util.Collections;&lt;br /&gt;
import javax.xml.crypto.dsig.CanonicalizationMethod;&lt;br /&gt;
import javax.xml.crypto.dsig.DigestMethod;&lt;br /&gt;
import javax.xml.crypto.dsig.Reference;&lt;br /&gt;
import javax.xml.crypto.dsig.SignatureMethod;&lt;br /&gt;
import javax.xml.crypto.dsig.SignedInfo;&lt;br /&gt;
import javax.xml.crypto.dsig.XMLSignature;&lt;br /&gt;
import javax.xml.crypto.dsig.XMLSignatureFactory;&lt;br /&gt;
import javax.xml.crypto.dsig.dom.DOMSignContext;&lt;br /&gt;
import javax.xml.crypto.dsig.dom.DOMValidateContext;&lt;br /&gt;
import javax.xml.crypto.dsig.keyinfo.KeyInfo;&lt;br /&gt;
import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;&lt;br /&gt;
import javax.xml.crypto.dsig.keyinfo.KeyValue;&lt;br /&gt;
import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;&lt;br /&gt;
import javax.xml.parsers.DocumentBuilder;&lt;br /&gt;
import javax.xml.parsers.DocumentBuilderFactory;&lt;br /&gt;
import javax.xml.soap.MessageFactory;&lt;br /&gt;
import javax.xml.soap.Name;&lt;br /&gt;
import javax.xml.soap.SOAPBody;&lt;br /&gt;
import javax.xml.soap.SOAPBodyElement;&lt;br /&gt;
import javax.xml.soap.SOAPEnvelope;&lt;br /&gt;
import javax.xml.soap.SOAPHeader;&lt;br /&gt;
import javax.xml.soap.SOAPHeaderElement;&lt;br /&gt;
import javax.xml.soap.SOAPMessage;&lt;br /&gt;
import javax.xml.soap.SOAPPart;&lt;br /&gt;
import javax.xml.transform.OutputKeys;&lt;br /&gt;
import javax.xml.transform.Source;&lt;br /&gt;
import javax.xml.transform.Transformer;&lt;br /&gt;
import javax.xml.transform.TransformerException;&lt;br /&gt;
import javax.xml.transform.TransformerFactory;&lt;br /&gt;
import javax.xml.transform.dom.DOMSource;&lt;br /&gt;
import javax.xml.transform.sax.SAXSource;&lt;br /&gt;
import javax.xml.transform.stream.StreamResult;&lt;br /&gt;
import org.w3c.dom.Document;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
import org.w3c.dom.Node;&lt;br /&gt;
import org.xml.sax.InputSource;&lt;br /&gt;
public class Signing {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();&lt;br /&gt;
    SOAPPart soapPart = soapMessage.getSOAPPart();&lt;br /&gt;
    SOAPEnvelope soapEnvelope = soapPart.getEnvelope();&lt;br /&gt;
    SOAPHeader soapHeader = soapEnvelope.getHeader();&lt;br /&gt;
    SOAPHeaderElement headerElement = soapHeader.addHeaderElement(soapEnvelope.createName(&lt;br /&gt;
        &amp;quot;Signature&amp;quot;, &amp;quot;SOAP-SEC&amp;quot;, &amp;quot;http://schemas.xmlsoap.org/soap/security/2000-12&amp;quot;));&lt;br /&gt;
    SOAPBody soapBody = soapEnvelope.getBody();&lt;br /&gt;
    soapBody.addAttribute(soapEnvelope.createName(&amp;quot;id&amp;quot;, &amp;quot;SOAP-SEC&amp;quot;,&lt;br /&gt;
        &amp;quot;http://schemas.xmlsoap.org/soap/security/2000-12&amp;quot;), &amp;quot;Body&amp;quot;);&lt;br /&gt;
    Name bodyName = soapEnvelope.createName(&amp;quot;FooBar&amp;quot;, &amp;quot;z&amp;quot;, &amp;quot;http://example.ru&amp;quot;);&lt;br /&gt;
    SOAPBodyElement gltp = soapBody.addBodyElement(bodyName);&lt;br /&gt;
    Source source = soapPart.getContent();&lt;br /&gt;
    Node root = null;&lt;br /&gt;
    if (source instanceof DOMSource) {&lt;br /&gt;
      root = ((DOMSource) source).getNode();&lt;br /&gt;
    } else if (source instanceof SAXSource) {&lt;br /&gt;
      InputSource inSource = ((SAXSource) source).getInputSource();&lt;br /&gt;
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();&lt;br /&gt;
      dbf.setNamespaceAware(true);&lt;br /&gt;
      DocumentBuilder db = null;&lt;br /&gt;
      db = dbf.newDocumentBuilder();&lt;br /&gt;
      Document doc = db.parse(inSource);&lt;br /&gt;
      root = (Node) doc.getDocumentElement();&lt;br /&gt;
    }&lt;br /&gt;
    dumpDocument(root);&lt;br /&gt;
    KeyPairGenerator kpg = KeyPairGenerator.getInstance(&amp;quot;DSA&amp;quot;);&lt;br /&gt;
    kpg.initialize(1024, new SecureRandom());&lt;br /&gt;
    KeyPair keypair = kpg.generateKeyPair();&lt;br /&gt;
    XMLSignatureFactory sigFactory = XMLSignatureFactory.getInstance();&lt;br /&gt;
    Reference ref = sigFactory.newReference(&amp;quot;#Body&amp;quot;, sigFactory.newDigestMethod(DigestMethod.SHA1,&lt;br /&gt;
        null));&lt;br /&gt;
    SignedInfo signedInfo = sigFactory.newSignedInfo(sigFactory.newCanonicalizationMethod(&lt;br /&gt;
        CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS, (C14NMethodParameterSpec) null), sigFactory&lt;br /&gt;
        .newSignatureMethod(SignatureMethod.DSA_SHA1, null), Collections.singletonList(ref));&lt;br /&gt;
    KeyInfoFactory kif = sigFactory.getKeyInfoFactory();&lt;br /&gt;
    KeyValue kv = kif.newKeyValue(keypair.getPublic());&lt;br /&gt;
    KeyInfo keyInfo = kif.newKeyInfo(Collections.singletonList(kv));&lt;br /&gt;
    XMLSignature sig = sigFactory.newXMLSignature(signedInfo, keyInfo);&lt;br /&gt;
    System.out.println(&amp;quot;Signing the message...&amp;quot;);&lt;br /&gt;
    PrivateKey privateKey = keypair.getPrivate();&lt;br /&gt;
    Element envelope = getFirstChildElement(root);&lt;br /&gt;
    Element header = getFirstChildElement(envelope);&lt;br /&gt;
    DOMSignContext sigContext = new DOMSignContext(privateKey, header);&lt;br /&gt;
    sigContext.putNamespacePrefix(XMLSignature.XMLNS, &amp;quot;ds&amp;quot;);&lt;br /&gt;
    sigContext.setIdAttributeNS(getNextSiblingElement(header),&lt;br /&gt;
        &amp;quot;http://schemas.xmlsoap.org/soap/security/2000-12&amp;quot;, &amp;quot;id&amp;quot;);&lt;br /&gt;
    sig.sign(sigContext);&lt;br /&gt;
    dumpDocument(root);&lt;br /&gt;
    System.out.println(&amp;quot;Validate the signature...&amp;quot;);&lt;br /&gt;
    Element sigElement = getFirstChildElement(header);&lt;br /&gt;
    DOMValidateContext valContext = new DOMValidateContext(keypair.getPublic(), sigElement);&lt;br /&gt;
    valContext.setIdAttributeNS(getNextSiblingElement(header),&lt;br /&gt;
        &amp;quot;http://schemas.xmlsoap.org/soap/security/2000-12&amp;quot;, &amp;quot;id&amp;quot;);&lt;br /&gt;
    boolean valid = sig.validate(valContext);&lt;br /&gt;
    System.out.println(&amp;quot;Signature valid? &amp;quot; + valid);&lt;br /&gt;
  }&lt;br /&gt;
  private static void dumpDocument(Node root) throws TransformerException {&lt;br /&gt;
    Transformer transformer = TransformerFactory.newInstance().newTransformer();&lt;br /&gt;
    transformer.setOutputProperty(OutputKeys.INDENT, &amp;quot;yes&amp;quot;);&lt;br /&gt;
    transformer.transform(new DOMSource(root), new StreamResult(System.out));&lt;br /&gt;
  }&lt;br /&gt;
  private static Element getFirstChildElement(Node node) {&lt;br /&gt;
    Node child = node.getFirstChild();&lt;br /&gt;
    while ((child != null) &amp;amp;&amp;amp; (child.getNodeType() != Node.ELEMENT_NODE)) {&lt;br /&gt;
      child = child.getNextSibling();&lt;br /&gt;
    }&lt;br /&gt;
    return (Element) child;&lt;br /&gt;
  }&lt;br /&gt;
  public static Element getNextSiblingElement(Node node) {&lt;br /&gt;
    Node sibling = node.getNextSibling();&lt;br /&gt;
    while ((sibling != null) &amp;amp;&amp;amp; (sibling.getNodeType() != Node.ELEMENT_NODE)) {&lt;br /&gt;
      sibling = sibling.getNextSibling();&lt;br /&gt;
    }&lt;br /&gt;
    return (Element) sibling;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;SOAP-ENV:Envelope xmlns:SOAP-ENV=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;lt;/codeTitle&amp;gt;&amp;lt;cnTitle&amp;gt;&amp;lt;/cnTitle&amp;gt;&amp;lt;codeKeywords&amp;gt;&amp;lt;/codeKeywords&amp;gt;&amp;lt;codeComments&amp;gt;&amp;lt;/codeComments&amp;gt;&lt;br /&gt;
&amp;lt;SOAP-ENV:Header&amp;gt;&lt;br /&gt;
&amp;lt;SOAP-SEC:Signature xmlns:SOAP-SEC=&amp;quot;http://schemas.xmlsoap.org/soap/security/2000-12&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/SOAP-ENV:Header&amp;gt;&lt;br /&gt;
&amp;lt;SOAP-ENV:Body xmlns:SOAP-SEC=&amp;quot;http://schemas.xmlsoap.org/soap/security/2000-12&amp;quot; SOAP-SEC:id=&amp;quot;Body&amp;lt;/codeTitle&amp;gt;&amp;lt;cnTitle&amp;gt;&amp;lt;/cnTitle&amp;gt;&amp;lt;codeKeywords&amp;gt;&amp;lt;/codeKeywords&amp;gt;&amp;lt;codeComments&amp;gt;&amp;lt;/codeComments&amp;gt;&lt;br /&gt;
&amp;lt;z:FooBar xmlns:z=&amp;quot;http://example.ru&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/SOAP-ENV:Body&amp;gt;&lt;br /&gt;
&amp;lt;/SOAP-ENV:Envelope&amp;gt;&lt;br /&gt;
Signing the message...&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;SOAP-ENV:Envelope xmlns:SOAP-ENV=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;lt;/codeTitle&amp;gt;&amp;lt;cnTitle&amp;gt;&amp;lt;/cnTitle&amp;gt;&amp;lt;codeKeywords&amp;gt;&amp;lt;/codeKeywords&amp;gt;&amp;lt;codeComments&amp;gt;&amp;lt;/codeComments&amp;gt;&lt;br /&gt;
&amp;lt;SOAP-ENV:Header&amp;gt;&lt;br /&gt;
&amp;lt;SOAP-SEC:Signature xmlns:SOAP-SEC=&amp;quot;http://schemas.xmlsoap.org/soap/security/2000-12&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;ds:Signature xmlns:ds=&amp;quot;http://www.w3.org/2000/09/xmldsig#&amp;lt;/codeTitle&amp;gt;&amp;lt;cnTitle&amp;gt;&amp;lt;/cnTitle&amp;gt;&amp;lt;codeKeywords&amp;gt;&amp;lt;/codeKeywords&amp;gt;&amp;lt;codeComments&amp;gt;&amp;lt;/codeComments&amp;gt;&lt;br /&gt;
&amp;lt;ds:SignedInfo&amp;gt;&lt;br /&gt;
&amp;lt;ds:CanonicalizationMethod Algorithm=&amp;quot;http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;ds:SignatureMethod Algorithm=&amp;quot;http://www.w3.org/2000/09/xmldsig#dsa-sha1&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;ds:Reference URI=&amp;quot;#Body&amp;lt;/codeTitle&amp;gt;&amp;lt;cnTitle&amp;gt;&amp;lt;/cnTitle&amp;gt;&amp;lt;codeKeywords&amp;gt;&amp;lt;/codeKeywords&amp;gt;&amp;lt;codeComments&amp;gt;&amp;lt;/codeComments&amp;gt;&lt;br /&gt;
&amp;lt;ds:DigestMethod Algorithm=&amp;quot;http://www.w3.org/2000/09/xmldsig#sha1&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;ds:DigestValue&amp;gt;9x0mZhajy9dHKuIXh7bm0khuC7M=&amp;lt;/ds:DigestValue&amp;gt;&lt;br /&gt;
&amp;lt;/ds:Reference&amp;gt;&lt;br /&gt;
&amp;lt;/ds:SignedInfo&amp;gt;&lt;br /&gt;
&amp;lt;ds:SignatureValue&amp;gt;CiKztXFr2HnE1ul1S5OrJpiYCV46MJ9jEiDaU7AkAiCsgkTDxAhzyA==&amp;lt;/ds:SignatureValue&amp;gt;&lt;br /&gt;
&amp;lt;ds:KeyInfo&amp;gt;&lt;br /&gt;
&amp;lt;ds:KeyValue&amp;gt;&lt;br /&gt;
&amp;lt;ds:DSAKeyValue&amp;gt;&lt;br /&gt;
&amp;lt;ds:P&amp;gt;/X9TgR11EilS30qcLuzk5/YRt1I870QAwx4/gLZRJmlFXUAiUftZPY1Y+r/F9bow9subVWzXgTuA&lt;br /&gt;
HTRv8mZgt2uZUKWkn5/oBHsQIsJPu6nX/rfGG/g7V+fGqKYVDwT7g/bTxR7DAjVUE1oWkTL2dfOu&lt;br /&gt;
K2HXKu/yIgMZndFIAcc=&amp;lt;/ds:P&amp;gt;&lt;br /&gt;
&amp;lt;ds:Q&amp;gt;l2BQjxUjC8yykrmCouuEC/BYHPU=&amp;lt;/ds:Q&amp;gt;&lt;br /&gt;
&amp;lt;ds:G&amp;gt;9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3&lt;br /&gt;
zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKL&lt;br /&gt;
Zl6Ae1UlZAFMO/7PSSo=&amp;lt;/ds:G&amp;gt;&lt;br /&gt;
&amp;lt;ds:Y&amp;gt;j9Jsiuc8WtI3LxN+wuVUHsCJ5i22tG2SBtiRzKoWrpso/Tk62TJRN7FNsWQ0lDqIqJrQt4GqzkHx&lt;br /&gt;
yiRtmqm0xDsAd2ojzH1OZiGen+C8dsbAA4ydwmP1iz9UyAwevrdA/rhOAqgTUFv0ar9koh0aG/Wn&lt;br /&gt;
iFrXoLYt5eVzpw/swT4=&amp;lt;/ds:Y&amp;gt;&lt;br /&gt;
&amp;lt;/ds:DSAKeyValue&amp;gt;&lt;br /&gt;
&amp;lt;/ds:KeyValue&amp;gt;&lt;br /&gt;
&amp;lt;/ds:KeyInfo&amp;gt;&lt;br /&gt;
&amp;lt;/ds:Signature&amp;gt;&lt;br /&gt;
&amp;lt;/SOAP-ENV:Header&amp;gt;&lt;br /&gt;
&amp;lt;SOAP-ENV:Body xmlns:SOAP-SEC=&amp;quot;http://schemas.xmlsoap.org/soap/security/2000-12&amp;quot; SOAP-SEC:id=&amp;quot;Body&amp;lt;/codeTitle&amp;gt;&amp;lt;cnTitle&amp;gt;&amp;lt;/cnTitle&amp;gt;&amp;lt;codeKeywords&amp;gt;&amp;lt;/codeKeywords&amp;gt;&amp;lt;codeComments&amp;gt;&amp;lt;/codeComments&amp;gt;&lt;br /&gt;
&amp;lt;z:FooBar xmlns:z=&amp;quot;http://example.ru&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/SOAP-ENV:Body&amp;gt;&lt;br /&gt;
&amp;lt;/SOAP-ENV:Envelope&amp;gt;&lt;br /&gt;
Validate the signature...&lt;br /&gt;
Signature valid? true&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
#Code referenced from &lt;br /&gt;
#Chapter 6 - Extensible Markup Language (XML)&lt;br /&gt;
#Java 6 Platform Revealed&lt;br /&gt;
#by John Zukowski &lt;br /&gt;
#ISBN: 1590596609&lt;br /&gt;
#http://www.apress.ru/book/bookDisplay.html?bID=10109&lt;br /&gt;
        &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use DSA key pair to generate XML Signature ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
import java.security.KeyPair;&lt;br /&gt;
import java.security.KeyPairGenerator;&lt;br /&gt;
import java.security.SecureRandom;&lt;br /&gt;
import java.util.Collections;&lt;br /&gt;
import javax.xml.crypto.dsig.CanonicalizationMethod;&lt;br /&gt;
import javax.xml.crypto.dsig.DigestMethod;&lt;br /&gt;
import javax.xml.crypto.dsig.Reference;&lt;br /&gt;
import javax.xml.crypto.dsig.SignatureMethod;&lt;br /&gt;
import javax.xml.crypto.dsig.SignedInfo;&lt;br /&gt;
import javax.xml.crypto.dsig.XMLSignature;&lt;br /&gt;
import javax.xml.crypto.dsig.XMLSignatureFactory;&lt;br /&gt;
import javax.xml.crypto.dsig.keyinfo.KeyInfo;&lt;br /&gt;
import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;&lt;br /&gt;
import javax.xml.crypto.dsig.keyinfo.KeyValue;&lt;br /&gt;
import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    KeyPairGenerator kpg = KeyPairGenerator.getInstance(&amp;quot;DSA&amp;quot;);&lt;br /&gt;
    kpg.initialize(1024, new SecureRandom());&lt;br /&gt;
    KeyPair dsaKeyPair = kpg.generateKeyPair();&lt;br /&gt;
    XMLSignatureFactory sigFactory = XMLSignatureFactory.getInstance();&lt;br /&gt;
    Reference ref = sigFactory.newReference(&amp;quot;#Body&amp;quot;, sigFactory.newDigestMethod(DigestMethod.SHA1,&lt;br /&gt;
        null));&lt;br /&gt;
    SignedInfo signedInfo = sigFactory.newSignedInfo(sigFactory.newCanonicalizationMethod(&lt;br /&gt;
        CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS, (C14NMethodParameterSpec) null), sigFactory&lt;br /&gt;
        .newSignatureMethod(SignatureMethod.DSA_SHA1, null), Collections.singletonList(ref));&lt;br /&gt;
    KeyInfoFactory kif = sigFactory.getKeyInfoFactory();&lt;br /&gt;
    KeyValue kv = kif.newKeyValue(dsaKeyPair.getPublic());&lt;br /&gt;
    KeyInfo keyInfo = kif.newKeyInfo(Collections.singletonList(kv));&lt;br /&gt;
    XMLSignature xmlSig = sigFactory.newXMLSignature(signedInfo, keyInfo);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
        &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>