/* EncryptFile.java */ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; /** * * @author dhanoopbhaskar */ public class EncryptFile { SecretKey secretKey = null; Cipher cipher = null; String filePath = null; public EncryptFile(String filePath) { this.filePath = filePath; try { /** * Create a Blowfish key */ byte[] password = getPasswordFromFile(filePath); if (password == null) { System.out.println("Unable to read the password file!"); System.exit(0); } secretKey = new SecretKeySpec(password, "Blowfish"); /** * Create an instance of cipher mentioning the name of algorithm * - Blowfish */ cipher = Cipher.getInstance("Blowfish"); } catch (NoSuchPaddingException ex) { System.out.println(ex); } catch (NoSuchAlgorithmException ex) { System.out.println(ex); } } /** * * @param filePath * @return password * * Encrypts the file in srcPath and creates a file in destPath */ private byte[] getPasswordFromFile(String filePath) { File file = new File(filePath); InputStream inStream; /** * maximum allowable key size for blowfish is 56 bytes, * but java supports only upto 16 bytes. */ byte[] buffer = new byte[16]; try { inStream = new FileInputStream(file); int len = inStream.read(buffer); if (len <= 0) buffer = null; } catch (FileNotFoundException ex) { System.out.println(ex); } catch (IOException ex) { System.out.println(ex); } return buffer; } public static void main(String[] args) { String fileToEncrypt = "fileToEncrypt.jpg"; String encryptedFile = "encryptedFile.jpg"; String decryptedFile = "decryptedFile.jpg"; String directoryPath = "/home/dhanoopbhaskar/Desktop/blowfish/"; String passwordFile = "password.jpg"; EncryptFile encryptFile = new EncryptFile(directoryPath + passwordFile); System.out.println("Starting Encryption..."); encryptFile.encrypt(directoryPath + fileToEncrypt, directoryPath + encryptedFile); System.out.println("Encryption completed..."); encryptFile = new EncryptFile(directoryPath + passwordFile); System.out.println("Starting Decryption..."); encryptFile.decrypt(directoryPath + encryptedFile, directoryPath + decryptedFile); System.out.println("Decryption completed..."); } /** * * @param srcPath * @param destPath * * Encrypts the file in srcPath and creates a file in destPath */ private void encrypt(String srcPath, String destPath) { File rawFile = new File(srcPath); File encryptedFile = new File(destPath); InputStream inStream = null; OutputStream outStream = null; try { /** * Initialize the cipher for encryption */ cipher.init(Cipher.ENCRYPT_MODE, secretKey); /** * Initialize input and output streams */ inStream = new FileInputStream(rawFile); outStream = new FileOutputStream(encryptedFile); byte[] buffer = new byte[1024]; int len; while ((len = inStream.read(buffer)) > 0) { outStream.write(cipher.update(buffer, 0, len)); outStream.flush(); } outStream.write(cipher.doFinal()); inStream.close(); outStream.close(); } catch (IllegalBlockSizeException ex) { System.out.println(ex); } catch (BadPaddingException ex) { System.out.println(ex); } catch (InvalidKeyException ex) { System.out.println(ex); } catch (FileNotFoundException ex) { System.out.println(ex); } catch (IOException ex) { System.out.println(ex); } } /** * * @param srcPath * @param destPath * * Decrypts the file in srcPath and creates a file in destPath */ private void decrypt(String srcPath, String destPath) { File encryptedFile = new File(srcPath); File decryptedFile = new File(destPath); InputStream inStream = null; OutputStream outStream = null; try { /** * Initialize the cipher for decryption */ cipher.init(Cipher.DECRYPT_MODE, secretKey); /** * Initialize input and output streams */ inStream = new FileInputStream(encryptedFile); outStream = new FileOutputStream(decryptedFile); byte[] buffer = new byte[1024]; int len; while ((len = inStream.read(buffer)) > 0) { outStream.write(cipher.update(buffer, 0, len)); outStream.flush(); } outStream.write(cipher.doFinal()); inStream.close(); outStream.close(); } catch (IllegalBlockSizeException ex) { System.out.println(ex); } catch (BadPaddingException ex) { System.out.println(ex); } catch (InvalidKeyException ex) { System.out.println(ex); } catch (FileNotFoundException ex) { System.out.println(ex); } catch (IOException ex) { System.out.println(ex); } } }
2 Comments
Nice Codee, Pls will this code work on Vb.Net?
ReplyDeleteThanks
No way. VB.NET is a different platform.
Delete