Java tutorial
/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.commons.crypto.examples; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Properties; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.crypto.stream.CryptoInputStream; import org.apache.commons.crypto.stream.CryptoOutputStream; /** * Example showing how to use stream encryption and decryption. */ public class StreamExample { public static void main(String[] args) throws IOException { final SecretKeySpec key = new SecretKeySpec(getUTF8Bytes("1234567890123456"), "AES"); final IvParameterSpec iv = new IvParameterSpec(getUTF8Bytes("1234567890123456")); Properties properties = new Properties(); final String transform = "AES/CBC/PKCS5Padding"; String input = "hello world!"; //Encryption with CryptoOutputStream. ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try (CryptoOutputStream cos = new CryptoOutputStream(transform, properties, outputStream, key, iv)) { cos.write(getUTF8Bytes(input)); cos.flush(); } // The encrypted data: System.out.println("Encrypted: " + Arrays.toString(outputStream.toByteArray())); // Decryption with CryptoInputStream. InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); try (CryptoInputStream cis = new CryptoInputStream(transform, properties, inputStream, key, iv)) { byte[] decryptedData = new byte[1024]; int decryptedLen = 0; int i; while ((i = cis.read(decryptedData, decryptedLen, decryptedData.length - decryptedLen)) > -1) { decryptedLen += i; } System.out.println("Decrypted: " + new String(decryptedData, 0, decryptedLen, StandardCharsets.UTF_8)); } } /** * Converts String to UTF8 bytes * * @param input the input string * @return UTF8 bytes */ private static byte[] getUTF8Bytes(String input) { return input.getBytes(StandardCharsets.UTF_8); } }