Example of Java encryption
for any file using AES, IV, and CBC to CipherOutputStream. Download our
desktop application
and .jar file that includes this example below. View our desktop application's full source code
for desktop, command line, or maven dependency on our
GitHub page.
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.security.InvalidAlgorithmParameterException;import java.security.InvalidKeyException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.CipherOutputStream;import javax.crypto.NoSuchPaddingException;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;public class EncDecAESEncryptionExample {private final static String KEYALG = "AES/CBC/PKCS5Padding";//encrypt methodpublic static boolean encrypt(String key, InputStream is, OutputStream out)throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException,InvalidAlgorithmParameterException, IOException {boolean enc = false;int ivSize = 16;int keySize = 32;try {//Generate IVbyte[] iv = new byte[ivSize];SecureRandom random = new SecureRandom();random.nextBytes(iv);IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);//Hash keyMessageDigest digest = MessageDigest.getInstance("SHA-256");digest.update(key.getBytes());byte[] keyBytes = new byte[keySize];System.arraycopy(digest.digest(), 0, keyBytes, 0, keyBytes.length);SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES");//write iv to file firstout.write(iv);//EncryptCipher c = Cipher.getInstance(KEYALG);c.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);out = new CipherOutputStream(out, c);int count = 0;byte[] buffer = new byte[1024];while ((count = is.read(buffer)) >= 0) {out.write(buffer, 0, count);}enc = true;}catch (Exception e) {e.printStackTrace();enc = false;}finally {out.close();}return enc;}//decrypt modepublic static boolean decrypt(String key, InputStream is, OutputStream out)throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException,InvalidAlgorithmParameterException, IOException {boolean dec = false;int ivSize = 16;int keySize = 32;try {//Extract IVbyte[] iv = new byte[ivSize];is.read(iv, 0, 16);IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);//Hash keybyte[] keyBytes = new byte[keySize];MessageDigest md = MessageDigest.getInstance("SHA-256");md.update(key.getBytes());System.arraycopy(md.digest(), 0, keyBytes, 0, keyBytes.length);SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES");//DecryptCipher c = Cipher.getInstance(KEYALG);c.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);out = new CipherOutputStream(out, c);int count = 0;byte[] buffer = new byte[1024];while ((count = is.read(buffer)) >= 0) {out.write(buffer, 0, count);}dec = true;}catch (Exception e) {e.printStackTrace();dec = false;}finally {is.close();out.close();}return dec;}//process file for encryption or decryptionpublic static void main (String[] args) throws IOException {//Files file mode 1, encrypt method//Ex. "C:\test-original.docx"File originalFile = new File("path\\to\\original\\file");//Ex. "C:\my-hidden-file"File encryptedOutFile = new File("your-fullpath\\new-encrypted-filename");//Files for mode 2, decrypt method//Ex. "C:\my-hidden-file" **encrypted file created in mode 1**File encryptedInFile = new File("path\\to\\encrypted\\file");//Ex. "C:\test-decrypted.docx"File decrypted_file =new File("your-fullpath\\new-location-for-decrpyted-file-with-ext");String passcode = "your encryption passcode 1";//set encdec mode, 1 = encryption, 2 = decryptionint mode = 0;boolean encDec = false;try {//create 32 character,//encryption algorithm expects a passcode of base 16if (mode == 1) {//convert original file to inputstreamInputStream is = new FileInputStream(originalFile);//call encrypt methodencDec = encrypt(passcode, is,new FileOutputStream(encryptedOutFile));//create return valuesif (encDec == true) {System.out.println("File encrypted");}else {System.out.println("File not encrypted");}}else if (mode == 2) {//convert encrypted file to inputstreamInputStream is = new FileInputStream(encryptedInFile);//call decrypt methodencDec = decrypt(passcode, is,new FileOutputStream(decrypted_file));if (encDec == true) {System.out.println("File decrypted");}else {System.out.println("File not decrypted");}}else {System.out.println("Set mode to 1 or 2");}}catch (Exception e) {e.printStackTrace();}}}
