Sample code for 30+ languages & platforms
Java

JWE with DEFLATE Compression

See more JSON Web Encryption (JWE) Examples

Demonstrates how to DEFLATE ("zip") compress the JWE payload prior to encryption.

Note: This example requires Chilkat v9.5.0.66 or greater.

Chilkat Java Downloads

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

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.

        // Note: This example requires Chilkat v9.5.0.66 or greater.

        // Create some plaintext to be encrypted.
        // This example will demonstrate with and without DEFLATE (zip) compression.
        StringBuilder sbPlainText = new StringBuilder();
        boolean bCrLf = true;
        String line = "Live long and prosper.";
        sbPlainText.appendLine(line, bCrLf);
        sbPlainText.appendLine(line, bCrLf);
        sbPlainText.appendLine(line, bCrLf);
        sbPlainText.appendLine(line, bCrLf);

        // The text to be encrypted:
        System.out.println(sbPlainText.getAsString());

        Jwe jwe = new Jwe();

        // Build the JWE Protected Header: {"alg":"A128KW","enc":"A128CBC-HS256","zip":"DEF"}
        // The "zip":"DEF" parameter indicates that the plaintext payload should
        // be compressed prior to encryption.
        JsonObject jweProtHdr = new JsonObject();
        jweProtHdr.appendString("alg", "A128KW");
        jweProtHdr.appendString("enc", "A128CBC-HS256");
        jweProtHdr.appendString("zip", "DEF");
        jwe.setProtectedHeader(jweProtHdr);

        // Set the AES key wrap key:
        String aesWrappingKey = "GawgguFyGrWKav7AX4VKUg";
        jwe.setWrappingKey(0, aesWrappingKey, "base64url");

        // Encrypt and return the JWE in sbJweCompressed:
        StringBuilder sbJweCompressed = new StringBuilder();
        try {
            jwe.encryptSb(sbPlainText, "utf-8", sbJweCompressed);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Show the compressed JWE:
        System.out.println(sbJweCompressed.getAsString());
        System.out.println("size of compressed JWE: " + sbJweCompressed.getLength());

        // Now create a JWE without compression.
        jweProtHdr.delete("zip");
        // Make sure to update the shared protected header:
        jwe.setProtectedHeader(jweProtHdr);

        StringBuilder sbJweUncompressed = new StringBuilder();
        try {
            jwe.encryptSb(sbPlainText, "utf-8", sbJweUncompressed);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Show the uncompressed JWE:
        System.out.println(sbJweUncompressed.getAsString());
        System.out.println("size of uncompressed JWE: " + sbJweUncompressed.getLength());

        // Decrypting is the same whether compression is used or not.
        // The "zip" header in the JWE indicates that the payload should be
        // automatically decompressed (inflated) after decrypting.
        Jwe jwe2 = new Jwe();
        try {
            jwe2.loadJweSb(sbJweCompressed);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Set the AES wrap key.
        jwe2.setWrappingKey(0, aesWrappingKey, "base64url");

        // Decrypt (also automatically decompresses).
        StringBuilder sbOriginalText = new StringBuilder();
        try {
            jwe2.decryptSb(0, "utf-8", sbOriginalText);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        System.out.println("original text from compressed JWE: ");
        System.out.println(sbOriginalText.getAsString());

        // -----------------------------------------------------------
        // Do the same with the uncompressed JWE

        try {
            jwe2.loadJweSb(sbJweUncompressed);

            // Set the AES wrap key.
            jwe2.setWrappingKey(0, aesWrappingKey, "base64url");

            // Decrypt.
            sbOriginalText.clear();
            jwe2.decryptSb(0, "utf-8", sbOriginalText);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        System.out.println("original text from uncompressed JWE: ");
        System.out.println(sbOriginalText.getAsString());

        // ------------------------------------------------
        // The output of this example is:
        // (Note: Your output data will be different because the content encryption key is randomly generated.)

        // eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiemlwIjoiREVGIn0.xuW-pEAIdEUFnk10m8ocursvktO8Of9ByCCAt6LgKkkOtCWCUn1kQw.zpGj-9WVni3cQxyOuZbcGA.0hzP1myua3oYpUHwCIY_3edBUREbUpLaX6wYuJduOdI.Ppc6aEO3y3B8BJ1FKMPjlA
        // size of compressed JWE: 212
        // eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.N4KeyC7nnSFkieJOyE24_zKeuV_m7v5UKoJb1TgV4Yc_r2RzUPNvyA.6AEdyXSCKx-iMmUJyypSLg.QpixfyrwhGpmwUDp623viik4smPav7vwPLiC2r-V-jwnSfEH3mxWu6DbrIz3mixaqATwynmEBzVPxvS9jTXpSAGCnniib4_0WoPl3r_wF5tlsKOEe--jpNso-DKd1Tp8jJxj3JkFWt3IRnUUKGj17g.sBfDwFc5fzpaI-UW8-SW4g
        // size of uncompressed JWE: 303
        // original text from compressed JWE:
        // Live long and prosper.
        // Live long and prosper.
        // Live long and prosper.
        // Live long and prosper.
        //
        // original text from uncompressed JWE:
        // Live long and prosper.
        // Live long and prosper.
        // Live long and prosper.
        // Live long and prosper.
        //
    }
}