Source code of the Decrypter Class
The decrypter class has a Decrypt function which accepts the encrypted file and the password to be used for the decryption process. The filename to be passed has to be a .enc file and the same password that was used for the encryption process is required to be used.
package encdecexample; import java.awt.Color; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.logging.Level; import java.util.logging.Logger; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.SecretKeySpec; /** * * @author Me */ public class Decrypter { public static String currentFileWithoutEncExt = ""; public static void Decrypt(File SourceFile, char[] PassWord){ //Accepts a .enc file, creates a decrypted file without extension .enc. //As the file retains extension while crypting, the original file with original extension is obtained. //Deletes the .enc file in the end. FileInputStream inFile = null; FileOutputStream FileToWrite = null; try { int buffer = 4096; // The buffer for read and write FileIO String SourceFilePath = SourceFile.getPath(); String DestFilePath = SourceFilePath.substring(0, SourceFilePath.length() - 4);//strip .enc currentFileWithoutEncExt = DestFilePath; inFile = new FileInputStream(SourceFile); FileToWrite = new FileOutputStream(DestFilePath); byte[] keyData = null;; keyData = new String(PassWord).getBytes(); SecretKeySpec secretKeySpec = new SecretKeySpec(keyData, "BlowFish"); Cipher cipher = null; cipher = Cipher.getInstance("BlowFish"); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); byte[] input = new byte[buffer]; byte[] output = null; int bytesRead; while ((bytesRead = inFile.read(input)) != -1) { output = cipher.update(input, 0, bytesRead); if (output != null) { FileToWrite.write(output); } }//end while output = null; output = cipher.doFinal(); if (output != null) { FileToWrite.write(output); } inFile.getChannel().close(); inFile.close(); FileToWrite.getChannel().close(); FileToWrite.close(); SourceFile.delete();//delete the enc file } catch (BadPaddingException | IllegalBlockSizeException | NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IOException ex) { Logger.getLogger(Decrypter.class.getName()).log(Level.SEVERE, null, ex); if (ex.toString().contains("IOException") || ex.toString().contains("FileNotFound") || ex.toString().contains("AccessDenied") || ex.toString().contains("FileAlreadyExists")) { System.out.println("\nERROR : Failure in decrypting : " + SourceFile.getPath() + "\nError details : " + ex.toString()); // An unexpected error has happened , usually file system aaccess permissions,disk full etc } else { System.out.println("\nERROR : Failure in decrypting. Please check the algorithm and password.\n" + "Error while decrypting the file : " + SourceFile.getPath() + "\nError details : " + ex.toString()); } try { inFile.getChannel().close(); inFile.close(); FileToWrite.getChannel().close(); FileToWrite.close(); File f = new File(currentFileWithoutEncExt); boolean success = f.delete(); if (success) { System.out.println("\nSuccessfully deleted the partially decrypted file : " + currentFileWithoutEncExt); } else { System.out.println("\nERROR : Error deleting the partially decrypted file : " + currentFileWithoutEncExt); System.out.println("\nYou must manually delete the file."); } return; } catch (IOException ex1) { Logger.getLogger(Decrypter.class.getName()).log(Level.SEVERE, null, ex); return; } } } }
Usage
Compile and build the jar file.
Copy the jar file in a convenient folder.
Open command prompt
The syntax of the command to run is
java -jar encdec.jar <encrypt|decrypt>
for example
To Encrypt ( assuming desert.jpg and encdec.jar are in the same folder)
java -jar encdec.jar desert.jpg encrypt 12345a
encryption will create the file desert.jpg.enc
To Decrypt ( assuming desert.jpg.enc and encdec.jar are in the same folder)
java -jar encdec.jar desert.jpg.enc decrypt 12345a
decryption will again create the file desert.jpg
That is all.
If you liked this article please do leave a reply and share it with friends.
Thanks.