JDK (Java Development Kit) Tutorials
Dr. Herong Yang, Version 5.00

DSA Private Key and Public Key Pair Sample

This section provides a tutorial example on how to run JcaKeyPair.java to generate a DSA private key and public key pair sample. Keys are stored PKCS#8 and X.509 encoding formats.

Here is the result of my first test of JcaKeyPair.java - generating a pair of DSA private key and public key. It is done with JDK 1.3.1.

javac -classpath . JcaKeyPair.java

java -cp . JcaKeyPair 512 dsa dsa

KeyPairGenerator Object Info:
Algorithm = DSA
Provider = SUN version 1.2
Key Size = 512
toString = sun.security.provider.DSAKeyPairGenerator@2f6684

Private Key Info:
Algorithm = DSA
Saved File = dsa.pri
Size = 201
Format = PKCS#8
toString = Sun DSA Private Key
parameters:
p:
fca682ce 8e12caba 26efccf7 110e526d b078b05e decbcd1e b4a208f3 ae1617ae
01f35b91 a47e6df6 3413c5e1 2ed0899b cd132acd 50d99151 bdc43ee7 37592e17
q:
962eddcc 369cba8e bb260ee6 b6a126d9 346e38c5
g:
678471b2 7a9cf44e e91a49c5 147db1a9 aaf244f0 5a434d64 86931d2d 14271b9e
35030b71 fd73da17 9069b32e 2935630e 1c206235 4d0da20a 6c416e50 be794ca4

x: 3a46e9a6da9a90ee7c7cfedad597e260988f4e6a

Public Key Info:
Algorithm = DSA
Saved File = dsa.pub
Size = 244
Format = X.509
toString = Sun DSA Public Key
Parameters:
p:
fca682ce 8e12caba 26efccf7 110e526d b078b05e decbcd1e b4a208f3 ae1617ae
01f35b91 a47e6df6 3413c5e1 2ed0899b cd132acd 50d99151 bdc43ee7 37592e17
q:
962eddcc 369cba8e bb260ee6 b6a126d9 346e38c5
g:
678471b2 7a9cf44e e91a49c5 147db1a9 aaf244f0 5a434d64 86931d2d 14271b9e
35030b71 fd73da17 9069b32e 2935630e 1c206235 4d0da20a 6c416e50 be794ca4

y:
e803dccb c3292909 c589b7ca c3a18e97 d09b5a84 5b90e26d 525f6cb2 d10e987a
4dc7309b 706e8901 eca22c15 9d172763 619067a7 ec2cf389 b73c6133 7630d9cd

The program seems to be working:

  • Since I am not specifying the provider name, the implementation of the DSA algorithm provided in the default security package was selected. Of course, Sun is the provider of the default security package.
  • The key pair generated from the generateKeyPair() method indeed has two keys, a private key and a public key.
  • The private key was written to a file using PKCS#8 format, and the public key was written to another file using X.509 format.

In order to see the keys, I need to use my other program, HexWriter.java, to convert binary data to hex numbers. See chapter "Encoding Conversion" for details.

Here is how to look at DSA key files in hex numbers, 16 bytes per line:

javac HexWriter.java

java -cp . HexWriter dsa.pri dsa_pri.hex

type dsa_pri.hex
3081C60201003081A806072A8648CE38
040130819C024100FCA682CE8E12CABA
26EFCCF7110E526DB078B05EDECBCD1E
B4A208F3AE1617AE01F35B91A47E6DF6
3413C5E12ED0899BCD132ACD50D99151
BDC43EE737592E17021500962EDDCC36
9CBA8EBB260EE6B6A126D9346E38C502
40678471B27A9CF44EE91A49C5147DB1
A9AAF244F05A434D6486931D2D14271B
9E35030B71FD73DA179069B32E293563
0E1C2062354D0DA20A6C416E50BE794C
A4041602143A46E9A6DA9A90EE7C7CFE
DAD597E260988F4E6A

java -cp . HexWriter dsa.pub dsa_pub.hex

type dsa_pub.hex
3081F13081A806072A8648CE38040130
819C024100FCA682CE8E12CABA26EFCC
F7110E526DB078B05EDECBCD1EB4A208
F3AE1617AE01F35B91A47E6DF63413C5
E12ED0899BCD132ACD50D99151BDC43E
E737592E17021500962EDDCC369CBA8E
BB260EE6B6A126D9346E38C502406784
71B27A9CF44EE91A49C5147DB1A9AAF2
44F05A434D6486931D2D14271B9E3503
0B71FD73DA179069B32E2935630E1C20
62354D0DA20A6C416E50BE794CA40344
00024100E803DCCBC3292909C589B7CA
C3A18E97D09B5A845B90E26D525F6CB2
D10E987A4DC7309B706E8901ECA22C15
9D172763619067A7EC2CF389B73C6133
7630D9CD

Last update: 2006.

Sections in This Chapter

Private and Public Keys and Related Interfaces

KeyPair and KeyPairGenerator Classes

Key Pair Sample Program - JcaKeyPair.java

DSA Private Key and Public Key Pair Sample

RSA Private Key and Public Key Pair Sample

DiffieHellman Private Key and Public Key Pair Sample

Dr. Herong Yang, updated in 2008
DSA Private Key and Public Key Pair Sample