Sample code for 30+ languages & platforms
Java

JWE using A256GCMKW

See more JSON Web Encryption (JWE) Examples

This example demonstrates creating a JCE with AES GCM key wrap.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.JsonObject;
import com.chilkatsoft.chilkat2.Jwe;
import com.chilkatsoft.chilkat2.Prng;

public class ChilkatExample {

    public static void main(String[] args) {
        // This requires the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        String plaintext = "My text to enrypt";

        Jwe jwe = new Jwe();

        // First build the JWE Protected Header:

        //         {
        //             "alg": "A256GCMKW",
        //             "kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
        //             "tag": "kfPduVQ3T3H6vnewt--ksw",
        //             "iv": "KkYT0GX_2jHlfqN_",
        //             "enc": "A128CBC-HS256"
        //         }

        JsonObject jweProtHdr = new JsonObject();
        jweProtHdr.appendString("alg", "A256GCMKW");
        // kid is optional
        jweProtHdr.appendString("kid", "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d");
        // tag is optional
        jweProtHdr.appendString("tag", "kfPduVQ3T3H6vnewt--ksw");
        jweProtHdr.appendString("enc", "A256GCM");
        // the iv should be 16 random chars.
        Prng prng = new Prng();
        jweProtHdr.appendString("iv", prng.randomString(16, true, true, true));
        jwe.setProtectedHeader(jweProtHdr);

        System.out.println("JWE Protected Header: " + jweProtHdr.emit());
        System.out.println("--");

        // Given that we have 256-bit AES, our key should be 32 bytes.
        // The ascii string here is 32 bytes, therefore the 2nd arg is "ascii" to use these
        // ascii chars directly as the key.
        String aesWrappingKey = "2baf4f730f5e4542b428593ef9cceb0e";
        jwe.setWrappingKey(0, aesWrappingKey, "ascii");

        // Encrypt and return the JWE:
        String strJwe;
        try {
            strJwe = jwe.encrypt(plaintext, "utf-8");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Show the JWE we just created:
        System.out.println(strJwe);

        // Decrypt the JWE that was just produced.
        // 1) Load the JWE.
        // 2) Set the AES wrapping key.
        // 3) Decrypt.
        Jwe jwe2 = new Jwe();
        String originalPlaintext;
        try {
            jwe2.loadJwe(strJwe);

            // Set the AES wrap key.  Important to use "ascii"
            jwe2.setWrappingKey(0, aesWrappingKey, "ascii");

            // Decrypt.
            originalPlaintext = jwe2.decrypt(0, "utf-8");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        System.out.println("original text: ");
        System.out.println(originalPlaintext);
    }
}