<?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%2FSecurity%2FSignature</id>
		<title>Java/Security/Signature - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FSecurity%2FSignature"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Security/Signature&amp;action=history"/>
		<updated>2026-04-16T18:37:02Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/Security/Signature&amp;diff=7657&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Security/Signature&amp;diff=7657&amp;oldid=prev"/>
				<updated>2010-06-01T06:49:27Z</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:49, 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/Security/Signature&amp;diff=7656&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Security/Signature&amp;diff=7656&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:45Z</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;== Creating a 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.math.BigInteger;&lt;br /&gt;
import java.security.KeyFactory;&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.Signature;&lt;br /&gt;
import java.security.interfaces.DSAParams;&lt;br /&gt;
import java.security.interfaces.DSAPrivateKey;&lt;br /&gt;
import java.security.interfaces.DSAPublicKey;&lt;br /&gt;
import java.security.spec.DSAPrivateKeySpec;&lt;br /&gt;
import java.security.spec.KeySpec;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance(&amp;quot;DSA&amp;quot;);&lt;br /&gt;
    keyGen.initialize(1024);&lt;br /&gt;
    KeyPair keypair = keyGen.genKeyPair();&lt;br /&gt;
    DSAPrivateKey privateKey = (DSAPrivateKey) keypair.getPrivate();&lt;br /&gt;
    DSAPublicKey publicKey = (DSAPublicKey) keypair.getPublic();&lt;br /&gt;
    DSAParams dsaParams = privateKey.getParams();&lt;br /&gt;
    BigInteger p = dsaParams.getP();&lt;br /&gt;
    BigInteger q = dsaParams.getQ();&lt;br /&gt;
    BigInteger g = dsaParams.getG();&lt;br /&gt;
    BigInteger x = privateKey.getX();&lt;br /&gt;
    BigInteger y = publicKey.getY();&lt;br /&gt;
    // Create the DSA key factory&lt;br /&gt;
    KeyFactory keyFactory = KeyFactory.getInstance(&amp;quot;DSA&amp;quot;);&lt;br /&gt;
    // Create the DSA private key&lt;br /&gt;
    KeySpec privateKeySpec = new DSAPrivateKeySpec(x, p, q, g);&lt;br /&gt;
    PrivateKey privateKey1 = keyFactory.generatePrivate(privateKeySpec);&lt;br /&gt;
    byte[] buffer = new byte[1024];&lt;br /&gt;
    Signature sig = Signature.getInstance(privateKey1.getAlgorithm());&lt;br /&gt;
    sig.initSign(privateKey1);&lt;br /&gt;
    sig.update(buffer, 0, buffer.length);&lt;br /&gt;
  }&lt;br /&gt;
}&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;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Generate a DSA 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;
/* From http://java.sun.ru/docs/books/tutorial/index.html */&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions are met:&lt;br /&gt;
 *&lt;br /&gt;
 * -Redistribution of source code must retain the above copyright notice, this&lt;br /&gt;
 *  list of conditions and the following disclaimer.&lt;br /&gt;
 *&lt;br /&gt;
 * -Redistribution in binary form must reproduce the above copyright notice,&lt;br /&gt;
 *  this list of conditions and the following disclaimer in the documentation&lt;br /&gt;
 *  and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * Neither the name of Sun Microsystems, Inc. or the names of contributors may&lt;br /&gt;
 * be used to endorse or promote products derived from this software without&lt;br /&gt;
 * specific prior written permission.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL&lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING&lt;br /&gt;
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. (&amp;quot;SUN&amp;quot;)&lt;br /&gt;
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE&lt;br /&gt;
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS&lt;br /&gt;
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST&lt;br /&gt;
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,&lt;br /&gt;
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY&lt;br /&gt;
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,&lt;br /&gt;
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 *&lt;br /&gt;
 * You acknowledge that this software is not designed, licensed or intended&lt;br /&gt;
 * for use in the design, construction, operation or maintenance of any&lt;br /&gt;
 * nuclear facility.&lt;br /&gt;
 */&lt;br /&gt;
import java.io.BufferedInputStream;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.io.FileOutputStream;&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.PublicKey;&lt;br /&gt;
import java.security.SecureRandom;&lt;br /&gt;
import java.security.Signature;&lt;br /&gt;
public class GenSig {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    /* Generate a DSA signature */&lt;br /&gt;
    if (args.length != 1) {&lt;br /&gt;
      System.out.println(&amp;quot;Usage: GenSig nameOfFileToSign&amp;quot;);&lt;br /&gt;
    } else&lt;br /&gt;
      try {&lt;br /&gt;
        /* Generate a key pair */&lt;br /&gt;
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance(&amp;quot;DSA&amp;quot;,&lt;br /&gt;
            &amp;quot;SUN&amp;quot;);&lt;br /&gt;
        SecureRandom random = SecureRandom.getInstance(&amp;quot;SHA1PRNG&amp;quot;,&lt;br /&gt;
            &amp;quot;SUN&amp;quot;);&lt;br /&gt;
        keyGen.initialize(1024, random);&lt;br /&gt;
        KeyPair pair = keyGen.generateKeyPair();&lt;br /&gt;
        PrivateKey priv = pair.getPrivate();&lt;br /&gt;
        PublicKey pub = pair.getPublic();&lt;br /&gt;
        /*&lt;br /&gt;
         * Create a Signature object and initialize it with the private&lt;br /&gt;
         * key&lt;br /&gt;
         */&lt;br /&gt;
        Signature dsa = Signature.getInstance(&amp;quot;SHA1withDSA&amp;quot;, &amp;quot;SUN&amp;quot;);&lt;br /&gt;
        dsa.initSign(priv);&lt;br /&gt;
        /* Update and sign the data */&lt;br /&gt;
        FileInputStream fis = new FileInputStream(args[0]);&lt;br /&gt;
        BufferedInputStream bufin = new BufferedInputStream(fis);&lt;br /&gt;
        byte[] buffer = new byte[1024];&lt;br /&gt;
        int len;&lt;br /&gt;
        while (bufin.available() != 0) {&lt;br /&gt;
          len = bufin.read(buffer);&lt;br /&gt;
          dsa.update(buffer, 0, len);&lt;br /&gt;
        }&lt;br /&gt;
        ;&lt;br /&gt;
        bufin.close();&lt;br /&gt;
        /*&lt;br /&gt;
         * Now that all the data to be signed has been read in, generate&lt;br /&gt;
         * a signature for it&lt;br /&gt;
         */&lt;br /&gt;
        byte[] realSig = dsa.sign();&lt;br /&gt;
        /* Save the signature in a file */&lt;br /&gt;
        FileOutputStream sigfos = new FileOutputStream(&amp;quot;sig&amp;quot;);&lt;br /&gt;
        sigfos.write(realSig);&lt;br /&gt;
        sigfos.close();&lt;br /&gt;
        /* Save the public key in a file */&lt;br /&gt;
        byte[] key = pub.getEncoded();&lt;br /&gt;
        FileOutputStream keyfos = new FileOutputStream(&amp;quot;suepk&amp;quot;);&lt;br /&gt;
        keyfos.write(key);&lt;br /&gt;
        keyfos.close();&lt;br /&gt;
      } catch (Exception e) {&lt;br /&gt;
        System.err.println(&amp;quot;Caught exception &amp;quot; + e.toString());&lt;br /&gt;
      }&lt;br /&gt;
  };&lt;br /&gt;
}&lt;br /&gt;
&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;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Signature Sign And Verify ==&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.PublicKey;&lt;br /&gt;
import java.security.SecureRandom;&lt;br /&gt;
import java.security.Security;&lt;br /&gt;
import java.security.Signature;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String args[]) throws Exception {&lt;br /&gt;
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());&lt;br /&gt;
    KeyPair keyPair = generateKeyPair(999);&lt;br /&gt;
    byte[] data = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 };&lt;br /&gt;
    byte[] digitalSignature = signData(data, keyPair.getPrivate());&lt;br /&gt;
    boolean verified;&lt;br /&gt;
    verified = verifySig(data, keyPair.getPublic(), digitalSignature);&lt;br /&gt;
    System.out.println(verified) ;&lt;br /&gt;
    keyPair = generateKeyPair(888);&lt;br /&gt;
    verified = verifySig(data, keyPair.getPublic(), digitalSignature);&lt;br /&gt;
    System.out.println(verified);&lt;br /&gt;
  }&lt;br /&gt;
  public static byte[] signData(byte[] data, PrivateKey key) throws Exception {&lt;br /&gt;
    Signature signer = Signature.getInstance(&amp;quot;SHA1withDSA&amp;quot;);&lt;br /&gt;
    signer.initSign(key);&lt;br /&gt;
    signer.update(data);&lt;br /&gt;
    return (signer.sign());&lt;br /&gt;
  }&lt;br /&gt;
  public static boolean verifySig(byte[] data, PublicKey key, byte[] sig) throws Exception {&lt;br /&gt;
    Signature signer = Signature.getInstance(&amp;quot;SHA1withDSA&amp;quot;);&lt;br /&gt;
    signer.initVerify(key);&lt;br /&gt;
    signer.update(data);&lt;br /&gt;
    return (signer.verify(sig));&lt;br /&gt;
  }&lt;br /&gt;
  public static KeyPair generateKeyPair(long seed) throws Exception {&lt;br /&gt;
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());&lt;br /&gt;
    KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance(&amp;quot;DSA&amp;quot;);&lt;br /&gt;
    SecureRandom rng = SecureRandom.getInstance(&amp;quot;SHA1PRNG&amp;quot;, &amp;quot;SUN&amp;quot;);&lt;br /&gt;
    rng.setSeed(seed);&lt;br /&gt;
    keyGenerator.initialize(1024, rng);&lt;br /&gt;
    return (keyGenerator.generateKeyPair());&lt;br /&gt;
  }&lt;br /&gt;
}&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;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Signing a Java Object ==&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.io.Serializable;&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.PublicKey;&lt;br /&gt;
import java.security.Signature;&lt;br /&gt;
import java.security.SignedObject;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance(&amp;quot;DSA&amp;quot;);&lt;br /&gt;
    keyGen.initialize(1024);&lt;br /&gt;
    KeyPair keypair = keyGen.genKeyPair();&lt;br /&gt;
    PrivateKey privateKey = keypair.getPrivate();&lt;br /&gt;
    PublicKey publicKey = keypair.getPublic();&lt;br /&gt;
    Serializable o = new MyClass();&lt;br /&gt;
    Signature sig = Signature.getInstance(privateKey.getAlgorithm());&lt;br /&gt;
    SignedObject so = new SignedObject(o, privateKey, sig);&lt;br /&gt;
    &lt;br /&gt;
    sig = Signature.getInstance(publicKey.getAlgorithm());&lt;br /&gt;
    boolean b = so.verify(publicKey, sig);&lt;br /&gt;
    o = (MyClass) so.getObject();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MyClass implements Serializable {&lt;br /&gt;
  String s = &amp;quot;my string&amp;quot;;&lt;br /&gt;
  int i = 123;&lt;br /&gt;
}&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;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test the 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;
/* From http://java.sun.ru/docs/books/tutorial/index.html */&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions are met:&lt;br /&gt;
 *&lt;br /&gt;
 * -Redistribution of source code must retain the above copyright notice, this&lt;br /&gt;
 *  list of conditions and the following disclaimer.&lt;br /&gt;
 *&lt;br /&gt;
 * -Redistribution in binary form must reproduce the above copyright notice,&lt;br /&gt;
 *  this list of conditions and the following disclaimer in the documentation&lt;br /&gt;
 *  and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * Neither the name of Sun Microsystems, Inc. or the names of contributors may&lt;br /&gt;
 * be used to endorse or promote products derived from this software without&lt;br /&gt;
 * specific prior written permission.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL&lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING&lt;br /&gt;
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. (&amp;quot;SUN&amp;quot;)&lt;br /&gt;
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE&lt;br /&gt;
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS&lt;br /&gt;
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST&lt;br /&gt;
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,&lt;br /&gt;
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY&lt;br /&gt;
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,&lt;br /&gt;
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 *&lt;br /&gt;
 * You acknowledge that this software is not designed, licensed or intended&lt;br /&gt;
 * for use in the design, construction, operation or maintenance of any&lt;br /&gt;
 * nuclear facility.&lt;br /&gt;
 */&lt;br /&gt;
import java.io.FileInputStream;&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.PublicKey;&lt;br /&gt;
import java.security.SecureRandom;&lt;br /&gt;
import java.security.Signature;&lt;br /&gt;
public class testSig {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    /* Test generating and verifying a DSA signature */&lt;br /&gt;
    try {&lt;br /&gt;
      /* generate a key pair */&lt;br /&gt;
      KeyPairGenerator keyGen = KeyPairGenerator.getInstance(&amp;quot;DSA&amp;quot;);&lt;br /&gt;
      keyGen.initialize(1024, new SecureRandom());&lt;br /&gt;
      KeyPair pair = keyGen.generateKeyPair();&lt;br /&gt;
      /*&lt;br /&gt;
       * create a Signature object to use for signing and verifying&lt;br /&gt;
       */&lt;br /&gt;
      Signature dsa = Signature.getInstance(&amp;quot;SHA/DSA&amp;quot;);&lt;br /&gt;
      /* initialize the Signature object for signing */&lt;br /&gt;
      PrivateKey priv = pair.getPrivate();&lt;br /&gt;
      dsa.initSign(priv);&lt;br /&gt;
      /* Update and sign the data */&lt;br /&gt;
      FileInputStream fis = new FileInputStream(args[0]);&lt;br /&gt;
      byte b;&lt;br /&gt;
      while (fis.available() != 0) {&lt;br /&gt;
        b = (byte) fis.read();&lt;br /&gt;
        dsa.update(b);&lt;br /&gt;
      }&lt;br /&gt;
      ;&lt;br /&gt;
      fis.close();&lt;br /&gt;
      /*&lt;br /&gt;
       * Now that all the data to be signed has been read in, sign it&lt;br /&gt;
       */&lt;br /&gt;
      byte[] sig = dsa.sign();&lt;br /&gt;
      /* Verify the signature */&lt;br /&gt;
      /* Initialize the Signature object for verification */&lt;br /&gt;
      PublicKey pub = pair.getPublic();&lt;br /&gt;
      dsa.initVerify(pub);&lt;br /&gt;
      /* Update and verify the data */&lt;br /&gt;
      fis = new FileInputStream(args[0]);&lt;br /&gt;
      while (fis.available() != 0) {&lt;br /&gt;
        b = (byte) fis.read();&lt;br /&gt;
        dsa.update(b);&lt;br /&gt;
      }&lt;br /&gt;
      ;&lt;br /&gt;
      fis.close();&lt;br /&gt;
      boolean verifies = dsa.verify(sig);&lt;br /&gt;
      System.out.println(&amp;quot;signature verifies: &amp;quot; + verifies);&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
      System.err.println(&amp;quot;Caught exception &amp;quot; + e.toString());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&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;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Verifies the signature for the given buffer of bytes using the public key. ==&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.math.BigInteger;&lt;br /&gt;
import java.security.KeyFactory;&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.PublicKey;&lt;br /&gt;
import java.security.Signature;&lt;br /&gt;
import java.security.interfaces.DSAParams;&lt;br /&gt;
import java.security.interfaces.DSAPrivateKey;&lt;br /&gt;
import java.security.interfaces.DSAPublicKey;&lt;br /&gt;
import java.security.spec.DSAPrivateKeySpec;&lt;br /&gt;
import java.security.spec.DSAPublicKeySpec;&lt;br /&gt;
import java.security.spec.KeySpec;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance(&amp;quot;DSA&amp;quot;);&lt;br /&gt;
    keyGen.initialize(1024);&lt;br /&gt;
    KeyPair keypair = keyGen.genKeyPair();&lt;br /&gt;
    DSAPrivateKey privateKey = (DSAPrivateKey) keypair.getPrivate();&lt;br /&gt;
    DSAPublicKey publicKey = (DSAPublicKey) keypair.getPublic();&lt;br /&gt;
    DSAParams dsaParams = privateKey.getParams();&lt;br /&gt;
    BigInteger p = dsaParams.getP();&lt;br /&gt;
    BigInteger q = dsaParams.getQ();&lt;br /&gt;
    BigInteger g = dsaParams.getG();&lt;br /&gt;
    BigInteger x = privateKey.getX();&lt;br /&gt;
    BigInteger y = publicKey.getY();&lt;br /&gt;
    KeyFactory keyFactory = KeyFactory.getInstance(&amp;quot;DSA&amp;quot;);&lt;br /&gt;
    KeySpec publicKeySpec = new DSAPublicKeySpec(y, p, q, g);&lt;br /&gt;
    PublicKey publicKey1 = keyFactory.generatePublic(publicKeySpec);&lt;br /&gt;
    KeySpec privateKeySpec = new DSAPrivateKeySpec(x, p, q, g);&lt;br /&gt;
    PrivateKey privateKey1 = keyFactory.generatePrivate(privateKeySpec);&lt;br /&gt;
    byte[] buffer = new byte[1024];&lt;br /&gt;
    Signature sig = Signature.getInstance(privateKey1.getAlgorithm());&lt;br /&gt;
    sig.initSign(privateKey1);&lt;br /&gt;
    sig.update(buffer, 0, buffer.length);&lt;br /&gt;
    byte[] signature = sig.sign();&lt;br /&gt;
    sig = Signature.getInstance(publicKey1.getAlgorithm());&lt;br /&gt;
    sig.initVerify(publicKey1);&lt;br /&gt;
    sig.update(buffer, 0, buffer.length);&lt;br /&gt;
    sig.verify(signature);&lt;br /&gt;
  }&lt;br /&gt;
}    &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;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Verify a DSA 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;
/* From http://java.sun.ru/docs/books/tutorial/index.html */&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions are met:&lt;br /&gt;
 *&lt;br /&gt;
 * -Redistribution of source code must retain the above copyright notice, this&lt;br /&gt;
 *  list of conditions and the following disclaimer.&lt;br /&gt;
 *&lt;br /&gt;
 * -Redistribution in binary form must reproduce the above copyright notice,&lt;br /&gt;
 *  this list of conditions and the following disclaimer in the documentation&lt;br /&gt;
 *  and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * Neither the name of Sun Microsystems, Inc. or the names of contributors may&lt;br /&gt;
 * be used to endorse or promote products derived from this software without&lt;br /&gt;
 * specific prior written permission.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL&lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING&lt;br /&gt;
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. (&amp;quot;SUN&amp;quot;)&lt;br /&gt;
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE&lt;br /&gt;
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS&lt;br /&gt;
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST&lt;br /&gt;
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,&lt;br /&gt;
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY&lt;br /&gt;
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,&lt;br /&gt;
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 *&lt;br /&gt;
 * You acknowledge that this software is not designed, licensed or intended&lt;br /&gt;
 * for use in the design, construction, operation or maintenance of any&lt;br /&gt;
 * nuclear facility.&lt;br /&gt;
 */&lt;br /&gt;
import java.io.BufferedInputStream;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.security.KeyFactory;&lt;br /&gt;
import java.security.PublicKey;&lt;br /&gt;
import java.security.Signature;&lt;br /&gt;
import java.security.spec.X509EncodedKeySpec;&lt;br /&gt;
public class VerSig {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    /* Verify a DSA signature */&lt;br /&gt;
    if (args.length != 3) {&lt;br /&gt;
      System.out&lt;br /&gt;
          .println(&amp;quot;Usage: VerSig publickeyfile signaturefile datafile&amp;quot;);&lt;br /&gt;
    } else&lt;br /&gt;
      try {&lt;br /&gt;
        /* import encoded public key */&lt;br /&gt;
        FileInputStream keyfis = new FileInputStream(args[0]);&lt;br /&gt;
        byte[] encKey = new byte[keyfis.available()];&lt;br /&gt;
        keyfis.read(encKey);&lt;br /&gt;
        keyfis.close();&lt;br /&gt;
        X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(encKey);&lt;br /&gt;
        KeyFactory keyFactory = KeyFactory.getInstance(&amp;quot;DSA&amp;quot;, &amp;quot;SUN&amp;quot;);&lt;br /&gt;
        PublicKey pubKey = keyFactory.generatePublic(pubKeySpec);&lt;br /&gt;
        /* input the signature bytes */&lt;br /&gt;
        FileInputStream sigfis = new FileInputStream(args[1]);&lt;br /&gt;
        byte[] sigToVerify = new byte[sigfis.available()];&lt;br /&gt;
        sigfis.read(sigToVerify);&lt;br /&gt;
        sigfis.close();&lt;br /&gt;
        /*&lt;br /&gt;
         * create a Signature object and initialize it with the public&lt;br /&gt;
         * key&lt;br /&gt;
         */&lt;br /&gt;
        Signature sig = Signature.getInstance(&amp;quot;SHA1withDSA&amp;quot;, &amp;quot;SUN&amp;quot;);&lt;br /&gt;
        sig.initVerify(pubKey);&lt;br /&gt;
        /* Update and verify the data */&lt;br /&gt;
        FileInputStream datafis = new FileInputStream(args[2]);&lt;br /&gt;
        BufferedInputStream bufin = new BufferedInputStream(datafis);&lt;br /&gt;
        byte[] buffer = new byte[1024];&lt;br /&gt;
        int len;&lt;br /&gt;
        while (bufin.available() != 0) {&lt;br /&gt;
          len = bufin.read(buffer);&lt;br /&gt;
          sig.update(buffer, 0, len);&lt;br /&gt;
        }&lt;br /&gt;
        ;&lt;br /&gt;
        bufin.close();&lt;br /&gt;
        boolean verifies = sig.verify(sigToVerify);&lt;br /&gt;
        System.out.println(&amp;quot;signature verifies: &amp;quot; + verifies);&lt;br /&gt;
      } catch (Exception e) {&lt;br /&gt;
        System.err.println(&amp;quot;Caught exception &amp;quot; + e.toString());&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;/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>