title: How to encrypt images in java
body: <p>Need advice on this as I am still unable to encrypt /decrypt a images successfully in java.
  For the user to decrypt the image, the user has to click the image and enter the image password, similar to a password protected text file or pdf file.</p>
  
  <p>Below is the function for encryption Image in java</p>
  
  <pre><code>public static void ImgEncrypt()throws Exception{
  
             // Scanner to read the user's password. The Java cryptography
             // architecture points out that strong passwords in strings is a
             // bad idea, but we'll let it go for this assignment.
             Scanner scanner = new Scanner(System.in);
             // Arbitrary salt data, used to make guessing attacks against the
             // password more difficult to pull off.
             byte[] salt = { (byte) 0xc7, (byte) 0x73, (byte) 0x21, (byte) 0x8c,
                     (byte) 0x7e, (byte) 0xc8, (byte) 0xee, (byte) 0x99 };
  
             {
        File inputFile = new File("C:/rose.jpg");
                BufferedImage input = ImageIO.read(inputFile);
                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
                SecretKeyFactory keyFac = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
               // Get a password from the user.
               System.out.print("Password: ");
               System.out.flush();
               PBEKeySpec pbeKeySpec = new PBEKeySpec(scanner.nextLine().toCharArray());          
               // Set up other parameters to be used by the password-based
               // encryption.
               PBEParameterSpec pbeParamSpec = new PBEParameterSpec(salt, 20);
               SecretKey pbeKey = keyFac.generateSecret(pbeKeySpec);
               // Make a PBE Cyhper object and initialize it to encrypt using
               // the given password.
               Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
               pbeCipher.init(Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec);
               FileOutputStream output = new FileOutputStream("C:/output.jpg");
               CipherOutputStream cos = new CipherOutputStream(
                      output, pbeCipher);
                 //File outputFile = new File("image.png");
                   ImageIO.write(input,"JPG",cos);
                cos.close();    
  
      }
      }
  </code></pre>