<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FSecurity%2FDigital_Signature_Algorithm</id>
		<title>Java Tutorial/Security/Digital Signature Algorithm - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FSecurity%2FDigital_Signature_Algorithm"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Security/Digital_Signature_Algorithm&amp;action=history"/>
		<updated>2026-04-19T08:28:33Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/Security/Digital_Signature_Algorithm&amp;diff=4296&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Security/Digital_Signature_Algorithm&amp;diff=4296&amp;oldid=prev"/>
				<updated>2010-06-01T05:01:25Z</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;Версия 05:01, 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://www.jexp.ru/index.php?title=Java_Tutorial/Security/Digital_Signature_Algorithm&amp;diff=4295&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Security/Digital_Signature_Algorithm&amp;diff=4295&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:27Z</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;==  Create the DSA key factory from a Set of Digital Signature Algorithm (DSA) Parameters ==&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;
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.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;
  }&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;
==  Create the DSA private key from a Set of Digital Signature Algorithm (DSA) Parameters ==&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;
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.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 privateKeySpec = new DSAPrivateKeySpec(x, p, q, g);&lt;br /&gt;
    PrivateKey privateKey1 = keyFactory.generatePrivate(privateKeySpec);&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;
==  Create the DSA public key from a Set of Digital Signature Algorithm (DSA) Parameters ==&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;
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.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;
  }&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;
==  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;
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;
}&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;
==  Digital Signature Algorithm Demo ==&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;
import java.security.KeyPair;&lt;br /&gt;
import java.security.KeyPairGenerator;&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;
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance(&amp;quot;DSA&amp;quot;, &amp;quot;BC&amp;quot;);&lt;br /&gt;
    keyGen.initialize(512, new SecureRandom());&lt;br /&gt;
    KeyPair keyPair = keyGen.generateKeyPair();&lt;br /&gt;
    Signature signature = Signature.getInstance(&amp;quot;DSA&amp;quot;, &amp;quot;BC&amp;quot;);&lt;br /&gt;
    signature.initSign(keyPair.getPrivate(), new SecureRandom());&lt;br /&gt;
    byte[] message = &amp;quot;abc&amp;quot;.getBytes();&lt;br /&gt;
    signature.update(message);&lt;br /&gt;
    byte[] sigBytes = signature.sign();&lt;br /&gt;
    signature.initVerify(keyPair.getPublic());&lt;br /&gt;
    signature.update(message);&lt;br /&gt;
    System.out.println(signature.verify(sigBytes));&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;
==  DSA Key Translator ==&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;
import java.security.KeyFactory;&lt;br /&gt;
import java.security.KeyPair;&lt;br /&gt;
import java.security.KeyPairGenerator;&lt;br /&gt;
import java.security.NoSuchAlgorithmException;&lt;br /&gt;
import java.security.PrivateKey;&lt;br /&gt;
import java.security.PublicKey;&lt;br /&gt;
import java.security.spec.DSAPrivateKeySpec;&lt;br /&gt;
import java.security.spec.DSAPublicKeySpec;&lt;br /&gt;
import java.security.spec.InvalidKeySpecException;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException {&lt;br /&gt;
    KeyPairGenerator kpg = KeyPairGenerator.getInstance(&amp;quot;DSA&amp;quot;);&lt;br /&gt;
    kpg.initialize(512);&lt;br /&gt;
    KeyPair keys = kpg.genKeyPair();&lt;br /&gt;
    PrivateKey priKey = keys.getPrivate();&lt;br /&gt;
    PublicKey pubKey = keys.getPublic();&lt;br /&gt;
    KeyFactory kf = KeyFactory.getInstance(&amp;quot;DSA&amp;quot;);&lt;br /&gt;
    DSAPrivateKeySpec dsaPriKeySpec = (DSAPrivateKeySpec) kf.getKeySpec(priKey,&lt;br /&gt;
        DSAPrivateKeySpec.class);&lt;br /&gt;
    DSAPublicKeySpec dsaPubKeySpec = (DSAPublicKeySpec) kf.getKeySpec(pubKey,&lt;br /&gt;
        DSAPublicKeySpec.class);&lt;br /&gt;
    System.out.println(&amp;quot;\nDSA Private Key&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot;\nx = &amp;quot; + dsaPriKeySpec.getX());&lt;br /&gt;
    System.out.println(&amp;quot;\nDSA Public Key&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot;\ng = &amp;quot; + dsaPubKeySpec.getG());&lt;br /&gt;
    System.out.println(&amp;quot;\np = &amp;quot; + dsaPubKeySpec.getP());&lt;br /&gt;
    System.out.println(&amp;quot;\nq = &amp;quot; + dsaPubKeySpec.getQ());&lt;br /&gt;
    System.out.println(&amp;quot;\ny = &amp;quot; + dsaPubKeySpec.getY());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
DSA Private Key&lt;br /&gt;
x = 776400661570001590971791637592968309673321751461&lt;br /&gt;
DSA Public Key&lt;br /&gt;
g = 5421644057436475141609648488325705128047428394380474376834667300766108262613900542681289080713724597310673074119355136085795982097390670890367185141189796&lt;br /&gt;
p = 13232376895198612407547930718267435757728527029623408872245156039757713029036368719146452186041204237350521785240337048752071462798273003935646236777459223&lt;br /&gt;
q = 857393771208094202104259627990318636601332086981&lt;br /&gt;
y = 9079896982621092847112483863863391775338648287464668946120962630349123906761002084264031103470728516533966483834610830067548970604189069706612392762346323&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;
==  DSA with Elliptic Curve ==&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;
import java.security.KeyPair;&lt;br /&gt;
import java.security.KeyPairGenerator;&lt;br /&gt;
import java.security.SecureRandom;&lt;br /&gt;
import java.security.Security;&lt;br /&gt;
import java.security.Signature;&lt;br /&gt;
import java.security.spec.ECGenParameterSpec;&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;
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance(&amp;quot;ECDSA&amp;quot;, &amp;quot;BC&amp;quot;);&lt;br /&gt;
    ECGenParameterSpec ecSpec = new ECGenParameterSpec(&amp;quot;prime192v1&amp;quot;);&lt;br /&gt;
    keyGen.initialize(ecSpec, new SecureRandom());&lt;br /&gt;
    KeyPair keyPair = keyGen.generateKeyPair();&lt;br /&gt;
    Signature signature = Signature.getInstance(&amp;quot;ECDSA&amp;quot;, &amp;quot;BC&amp;quot;);&lt;br /&gt;
    signature.initSign(keyPair.getPrivate(), new SecureRandom());&lt;br /&gt;
    byte[] message = &amp;quot;abc&amp;quot;.getBytes();&lt;br /&gt;
    signature.update(message);&lt;br /&gt;
    byte[] sigBytes = signature.sign();&lt;br /&gt;
    signature.initVerify(keyPair.getPublic());&lt;br /&gt;
    signature.update(message);&lt;br /&gt;
    System.out.println(signature.verify(sigBytes));&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;
==  Export DSAPrivateKeySpec ==&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;
import java.io.FileOutputStream;&lt;br /&gt;
import java.io.ObjectOutputStream;&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.SecureRandom;&lt;br /&gt;
import java.security.spec.DSAPrivateKeySpec;&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(512, new SecureRandom());&lt;br /&gt;
    KeyPair kp = kpg.generateKeyPair();&lt;br /&gt;
    Class spec = Class.forName(&amp;quot;java.security.spec.DSAPrivateKeySpec&amp;quot;);&lt;br /&gt;
    KeyFactory kf = KeyFactory.getInstance(&amp;quot;DSA&amp;quot;);&lt;br /&gt;
    DSAPrivateKeySpec ks = (DSAPrivateKeySpec) kf.getKeySpec(kp.getPrivate(), spec);&lt;br /&gt;
    FileOutputStream fos = new FileOutputStream(&amp;quot;exportedKey&amp;quot;);&lt;br /&gt;
    ObjectOutputStream oos = new ObjectOutputStream(fos);&lt;br /&gt;
    oos.writeObject(ks.getX());&lt;br /&gt;
    oos.writeObject(ks.getP());&lt;br /&gt;
    oos.writeObject(ks.getQ());&lt;br /&gt;
    oos.writeObject(ks.getG());&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;
==  Getting the Digital Signature Algorithm (DSA) Parameters of a Key Pair ==&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;
import java.math.BigInteger;&lt;br /&gt;
import java.security.KeyPair;&lt;br /&gt;
import java.security.KeyPairGenerator;&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;
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;
  }&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;
==  Signed 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;
import java.security.KeyPair;&lt;br /&gt;
import java.security.KeyPairGenerator;&lt;br /&gt;
import java.security.Signature;&lt;br /&gt;
import java.security.SignedObject;&lt;br /&gt;
import java.util.Vector;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    String alg = &amp;quot;DSA&amp;quot;;&lt;br /&gt;
    KeyPairGenerator kg = KeyPairGenerator.getInstance(alg);&lt;br /&gt;
    KeyPair keyPair = kg.genKeyPair();&lt;br /&gt;
    Vector v = new Vector();&lt;br /&gt;
    v.add(&amp;quot;This is a test!&amp;quot;);&lt;br /&gt;
    Signature sign = Signature.getInstance(alg);&lt;br /&gt;
    SignedObject so = new SignedObject(v, keyPair.getPrivate(), sign);&lt;br /&gt;
    System.out.println(so.verify(keyPair.getPublic(), sign));&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;
==  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;
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;
}&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 DSAPrivateKeySpec ==&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;
import java.io.FileInputStream;&lt;br /&gt;
import java.io.ObjectInputStream;&lt;br /&gt;
import java.math.BigInteger;&lt;br /&gt;
import java.security.KeyFactory;&lt;br /&gt;
import java.security.PrivateKey;&lt;br /&gt;
import java.security.spec.DSAPrivateKeySpec;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String args[]) throws Exception {&lt;br /&gt;
    FileInputStream fis = new FileInputStream(&amp;quot;exportedKey&amp;quot;);&lt;br /&gt;
    ObjectInputStream ois = new ObjectInputStream(fis);&lt;br /&gt;
    DSAPrivateKeySpec ks = new DSAPrivateKeySpec((BigInteger) ois.readObject(), (BigInteger) ois&lt;br /&gt;
        .readObject(), (BigInteger) ois.readObject(), (BigInteger) ois.readObject());&lt;br /&gt;
    KeyFactory kf = KeyFactory.getInstance(&amp;quot;DSA&amp;quot;);&lt;br /&gt;
    PrivateKey pk = kf.generatePrivate(ks);&lt;br /&gt;
    System.out.println(&amp;quot;Got private key&amp;quot;);&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;
==  Use DSA to Sign ==&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;
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;
public class MainClass {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    String alg = &amp;quot;DSA&amp;quot;;&lt;br /&gt;
    KeyPairGenerator kg = KeyPairGenerator.getInstance(alg);&lt;br /&gt;
    KeyPair keyPair = kg.genKeyPair();&lt;br /&gt;
    byte[] signature = performSigning(&amp;quot;test&amp;quot;, alg, keyPair);&lt;br /&gt;
    performVerification(args[0], alg, signature, keyPair.getPublic());&lt;br /&gt;
  }&lt;br /&gt;
  static byte[] performSigning(String s, String alg, KeyPair keyPair) throws Exception {&lt;br /&gt;
    Signature sign = Signature.getInstance(alg);&lt;br /&gt;
    PrivateKey privateKey = keyPair.getPrivate();&lt;br /&gt;
    PublicKey publicKey = keyPair.getPublic();&lt;br /&gt;
    sign.initSign(privateKey);&lt;br /&gt;
    sign.update(s.getBytes());&lt;br /&gt;
    return sign.sign();&lt;br /&gt;
  }&lt;br /&gt;
  static void performVerification(String s, String alg, byte[] signature, PublicKey publicKey)&lt;br /&gt;
      throws Exception {&lt;br /&gt;
    Signature sign = Signature.getInstance(alg);&lt;br /&gt;
    sign.initVerify(publicKey);&lt;br /&gt;
    sign.update(s.getBytes());&lt;br /&gt;
    System.out.println(sign.verify(signature));&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;
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;
}&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>