Sample code for 30+ languages & platforms
Java

Example for both AES-128 and ChaCha20 to Encrypt Binary Data

See more Encryption Examples

Demonstrates the use of the new EncryptBd and DecryptBd methods introduced in Chilkat v9.5.0.67 to encrypt/decrypt binary bytes.

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

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.BinData;
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Crypt2;

public class ChilkatExample {

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

        // Load a small JPG file to be encrypted/decrypted.
        BinData jpgBytes = new BinData();
        try {
            jpgBytes.loadFile("qa_data/jpg/starfish.jpg");
        } catch (ChilkatException e) {
            System.out.println("Failed to load JPG file.");
            return;
        }

        // Show the unencrypted JPG bytes in Base64 format.
        // (The "base64_mime" encoding was added in Chilkat v9.5.0.67.
        // The "base64" encoding emits a single line of base64, whereas
        // "base64_mime" will emit multi-line base64 as it would appear
        // in MIME.)
        System.out.println(jpgBytes.getEncoded("base64_mime"));

        // Sample base64_mime JPG data:

        //     /9j/4AAQSkZJRgABAgEASABIAAD/7Q18UGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
        //     AQBIAAAAAQABOEJJTQPzAAAAAAAIAAAAAAAAAAE4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgAB
        //     AAAAAAAAAAI4QklNA/UAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEA
        //     MgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNBBQAAAAAAAQAAAABOEJJTQQM
        //     ...

        Crypt2 crypt = new Crypt2();

        // Specify the encryption to be used.
        // First we'll do AES-128 CBC
        crypt.setCryptAlgorithm("aes");
        crypt.setCipherMode("cbc");
        crypt.setKeyLength(128);

        String ivHex = "000102030405060708090A0B0C0D0E0F";
        crypt.setEncodedIV(ivHex, "hex");

        String keyHex = "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F";
        crypt.setEncodedKey(keyHex, "hex");

        // Do the in-place 128-bit AES CBC encryption.
        // The contents of jpgBytes are replaced with the encrypted bytes.
        try {
            crypt.encryptBd(jpgBytes);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Examine the JPG bytes again.  The bytes should be different because they are encrypted:
        System.out.println(jpgBytes.getEncoded("base64_mime"));

        // Sample base64_mime encrypted JPG data:

        //     sbz0babt1WCkQf5xKMdg/baZAcUBO5GVUUDF2BjVqmd+HrqKN+t6hAcqakL/bdo0q9hYmow0Tp1e
        //     AQ9V9DOiifQUZqWVkR+kL/c45bq8JGFDvgNl0djPt+yYhV789IB/fPH0upx+/ad++WNOlv1IxGMr
        //     Y1x1oERU/IsiEzafUJdI4kZ6FQo2IPGMF/Rm1h79I7hP1yYUFxvJyz+PzaySAUH1nLsNHyDVY5VY
        //     O90aH3steRSYbz8C8UF9wQ3qqEIXQNnnixvoNDnmHyY39VoVBI5F6rnPwYDfAk2t8tmuryFqvwAu
        //     ...

        // Decrypt to restore back to the original:
        try {
            crypt.decryptBd(jpgBytes);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        System.out.println(jpgBytes.getEncoded("base64_mime"));

        //     /9j/4AAQSkZJRgABAgEASABIAAD/7Q18UGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
        //     AQBIAAAAAQABOEJJTQPzAAAAAAAIAAAAAAAAAAE4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgAB
        //     AAAAAAAAAAI4QklNA/UAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEA
        //     MgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNBBQAAAAAAAQAAAABOEJJTQQM
        //     ...

        // ----------------------------------------------------------------------------------
        // To do chacha20 encryption, just change the settings:

        crypt.setCryptAlgorithm("chacha20");
        crypt.setKeyLength(256);
        // The initial count is the initial block counter for the chacha20 algorithm.
        // It can be any integer, but must be set to the same when decrypting.
        crypt.setInitialCount(22);

        crypt.encryptBd(jpgBytes);
        // jpgBytes now contains chacha20 encrypted bytes.

        crypt.decryptBd(jpgBytes);
        // jpgBytes is now restored back to the original unencrypted by bytes.

        // Save the bytes to a file..
        jpgBytes.writeFile("qa_output/starfish.jpg");

        System.out.println("Success.");
    }
}