security
Get bytes of a key pair example
In this example we shall show you how to get the bytes of a key pair in Java. To get the bytes of a key pair one should perform the following steps:
- Create a KeyPairGenerator for the DSA algorithm and initialize it with a 1024-bit key size.
- Generate the KeyPair, with the
genKeyPair()
API method of the KeyPairGenerator. - Get the PrivateKey component and the PublicKey component of the key pair, using the
getPrivate()
andgetPublic()
API methods of the KeyPair. - Get the names of the primary encoding format of both the private and the public key, using the
getFormat()
API methods of both the PrivateKey and the PublicKey. - Get the bytes of the public and private keys, using the
getEncoded()
API methods of both the PrivateKey and the PublicKey. - Get for both the keys their EncodedKeySpec, using the PKCS8EncodedKeySpec for the private key and the X509EncodedKeySpec for the public key.
- Create a new KeyFactory from the DSA algorithm.
- Generate a new PrivateKey and a new PublicKey, using the
generatePrivate(KeySpec keySpec)
andgeneratePublic(KeySpec keySpec)
API methods of the KeyFactory. - In order to check if the new keys are equal to the old ones, invoke the
equals(Object obj)
API method of the String Class.
. Let’s take a look at the code snippet that follows:
package com.javacodegeeks.snippets.core; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.EncodedKeySpec; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; public class KeyPairBytesExample { public static void main(String[] args) { try { String algorithm = "DSA"; // or RSA, DH, etc. // Generate a 1024-bit Digital Signature Algorithm (RSA) key pair KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm); keyPairGenerator.initialize(1024); KeyPair keyPair = keyPairGenerator.genKeyPair(); PrivateKey privateKey = keyPair.getPrivate(); PublicKey publicKey = keyPair.getPublic(); // Get the formats of the encoded bytes String privateKeyFormat = privateKey.getFormat(); System.out.println("PrivateKey format : " + privateKeyFormat); String publicKeyFormat = publicKey.getFormat(); System.out.println("PublicKey format : " + publicKeyFormat); // Get bytes of the public and private keys byte[] privateKeyBytes = privateKey.getEncoded(); byte[] publicKeyBytes = publicKey.getEncoded(); // Get key pair Objects from their respective byte arrays // We initialize encoded key specifications based on the encoding formats EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes); EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicKeyBytes); KeyFactory keyFactory = KeyFactory.getInstance(algorithm); PrivateKey newPrivateKey = keyFactory.generatePrivate(privateKeySpec); PublicKey newPublicKey = keyFactory.generatePublic(publicKeySpec); System.out.println("Is transformation valid ? " + (privateKey.equals(newPrivateKey) && publicKey.equals(newPublicKey))); } catch (InvalidKeySpecException e) { } catch (NoSuchAlgorithmException e) { } } }
Output:
PrivateKey format : PKCS#8
PublicKey format : X.509
Is transformation valid ? true
This was an example of how to get the bytes of a key pair in Java.