Sample code for 30+ languages & platforms
Java

Create JCEKS Containing Secret Keys

See more Java KeyStore (JKS) Examples

Demonstrates how to create a JCEKS keystore file containing symmetric secret keys (for AES, Blowfish, HMAC SHA25, ChaCha20, etc.)

This example requires Chilkat v9.5.0.66 or greater.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.JavaKeyStore;
import com.chilkatsoft.chilkat2.JsonObject;
import com.chilkatsoft.chilkat2.Prng;
import com.chilkatsoft.chilkat2.StringBuilder;

public class ChilkatExample {

    public static void main(String[] args) {
        // IMPORTANT: This example requires Chilkat v9.5.0.66 or greater.

        // This example requires the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        JavaKeyStore jceks = new JavaKeyStore();

        // We'll need a pseudo-random number generator (PRNG) to generate symmetric keys.
        Prng prng = new Prng();

        // Generate some keys..

        // 128-bit AES key (16 bytes)
        String aesKey = prng.genRandom(16, "base64");

        // 256-bit Blowfish key (32 bytes)
        String blowfishKey = prng.genRandom(32, "base64");

        // HMAC SHA256 key
        // (An HMAC key can be anything, and any length. We'll use the following string:
        String hmacKey = "This is my HMAC key";

        // ChaCha20 256-bit
        String chachaKey = prng.genRandom(32, "base64");

        // Add each secret key to the JCEKS
        String encoding = "base64";
        String password = "secret";
        jceks.addSecretKey(aesKey, encoding, "AES", "my aes key", password);
        jceks.addSecretKey(blowfishKey, encoding, "BLOWFISH", "my blowfish key", password);
        // For HMAC, we're using the us-ascii bytes for the key..
        jceks.addSecretKey(hmacKey, "ascii", "HMAC_SHA256", "my hmac key", password);
        jceks.addSecretKey(chachaKey, encoding, "CHACHA", "my chacha20 key", password);

        String filePassword = "password";
        // Write the JCEKs to a file.
        try {
            jceks.toFile(filePassword, "qa_output/secretKeys.jceks");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // We can also emit as a JWK Set..
        StringBuilder sbJson = new StringBuilder();
        try {
            jceks.toJwkSet("secret", sbJson);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Emit the JSON in pretty-printed (indented) form:
        JsonObject json = new JsonObject();
        json.loadSb(sbJson);
        json.setEmitCompact(false);
        System.out.println(json.emit());

        // Output is:

        // {
        //   "keys": [
        //     {
        //       "kty": "oct",
        //       "alg": "AES",
        //       "k": "vHekQQB0Gc1NvppapUTW2g",
        //       "kid": "my aes key"
        //     },
        //     {
        //       "kty": "oct",
        //       "alg": "BLOWFISH",
        //       "k": "qHsdXaJsXicVCZbK8l8hJQpYOa0GkiO9gsRK9WLtht8",
        //       "kid": "my blowfish key"
        //     },
        //     {
        //       "kty": "oct",
        //       "alg": "HMAC_SHA256",
        //       "k": "VGhpcyBpcyBteSBITUFDIGtleQ",
        //       "kid": "my hmac key"
        //     },
        //     {
        //       "kty": "oct",
        //       "alg": "CHACHA",
        //       "k": "yNv832U43C9BcWvaQAH2_rG-GwfmpgT5JBRllWGQY1o",
        //       "kid": "my chacha20 key"
        //     }
        //   ]
        // }
        //
    }
}