title: How to Encrypt and Decrypt file Using RSA And AES Algorithm
body: <p>I want to encrypt test.txt file I am using this java class for encryption and decryption.In My directory I have three files private.txt for save private key and public.txt for public key and test.txt  is for encryption.</p>
  
  <pre><code>    package EncryptionDecryption;
      import java.io.BufferedInputStream;
  
  
      public class EncryptionUtil {
  
        /**
         * String to hold name of the encryption algorithm.
         */
        public static final String ALGORITHM = "RSA";
  
        /**
         * String to hold the name of the private key file.
         */
        public static final String PRIVATE_KEY_FILE = "private.txt";
  
        /**
         * String to hold name of the public key file.
         */
        public static final String PUBLIC_KEY_FILE = "public.txt";
  
  
        public static void generateKey() {
          try {
            final KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM);
            keyGen.initialize(1024);
            final KeyPair key = keyGen.generateKeyPair();
  
            File privateKeyFile = new File(PRIVATE_KEY_FILE);
            File publicKeyFile = new File(PUBLIC_KEY_FILE);
  
            // Create files to store public and private key
            if (privateKeyFile.getParentFile() != null) {
              privateKeyFile.getParentFile().mkdirs();
            }
            privateKeyFile.createNewFile();
  
            if (publicKeyFile.getParentFile() != null) {
              publicKeyFile.getParentFile().mkdirs();
            }
            publicKeyFile.createNewFile();
  
            // Saving the Public key in a file
            ObjectOutputStream publicKeyOS = new ObjectOutputStream(
                new FileOutputStream(publicKeyFile));
            publicKeyOS.writeObject(key.getPublic());
            System.out.println("public"+key.getPublic().getEncoded());
            publicKeyOS.close();
  
            // Saving the Private key in a file
            ObjectOutputStream privateKeyOS = new ObjectOutputStream(
                new FileOutputStream(privateKeyFile));
            privateKeyOS.writeObject(key.getPrivate());
            System.out.println("private"+key.getPrivate().getEncoded());
            //System.out.println(key.getPrivate());
            privateKeyOS.close();
          } catch (Exception e) {
            e.printStackTrace();
          }
  
        }
  
        public static boolean areKeysPresent() {
  
          File privateKey = new File(PRIVATE_KEY_FILE);
          File publicKey = new File(PUBLIC_KEY_FILE);
  
          if (privateKey.exists() &amp;&amp; publicKey.exists()) {
            return true;
          }
          return false;
        }
  
  
        public static byte[] encrypt(byte[]bs, PublicKey key) {
          byte[] cipherText = null;
          try {
            // get an RSA cipher object and print the provider
            final Cipher cipher = Cipher.getInstance(ALGORITHM);
            // encrypt the plain text using the public key
            cipher.init(Cipher.ENCRYPT_MODE, key);
            cipherText = cipher.doFinal(bs);
          } catch (Exception e) {
            e.printStackTrace();
          }
          return cipherText;
        }
  
  
        public static String decrypt(byte[] text, PrivateKey key) {
          byte[] dectyptedText = null;
          try {
            // get an RSA cipher object and print the provider
            final Cipher cipher = Cipher.getInstance(ALGORITHM);
  
            // decrypt the text using the private key
            cipher.init(Cipher.DECRYPT_MODE, key);
            dectyptedText = cipher.doFinal(text);
  
          } catch (Exception ex) {
            ex.printStackTrace();
          }
  
          return new String(dectyptedText);
        }
  
        public static void main(String[] args)throws IOException {
            System.out.println("Hai");
  
          try {
  
            // Check if the pair of keys are present else generate those.
  
  
              generateKey();
              File f=new File("test.txt");
              byte[] contents = new byte[(int)f.length()];
              BufferedInputStream bis = null;
              try
              {
                  bis = new BufferedInputStream(new FileInputStream(f));
                  DataInputStream dis = new DataInputStream(bis);
                  dis.readFully(contents);
              }
              finally
              {
                  if(bis != null)
                  {
                      bis.close();
                  }
              }           
  
  
           // final String originalText = "Text to be encrypted";
  
  
            // Encrypt the string using the public key
            ObjectInputStream  inputStream = new ObjectInputStream(new FileInputStream(PUBLIC_KEY_FILE));
            final PublicKey publicKey = (PublicKey) inputStream.readObject();
            final byte[] cipherText = encrypt(contents, publicKey);
            inputStream.close();
            // Decrypt the cipher text using the private key.
            ObjectInputStream inputStream1 = new ObjectInputStream(new FileInputStream(PRIVATE_KEY_FILE));
            final PrivateKey privateKey = (PrivateKey) inputStream1.readObject();
            final String plainText = decrypt(cipherText, privateKey);
  
            // Printing the Original, Encrypted and Decrypted Text
  
            System.out.println("Original Text: " + contents.toString());
            System.out.println("Encrypted Text: " +cipherText);
            System.out.println("Decrypted Text: " + plainText);
            inputStream.close();
            inputStream1.close();
  
          } catch (Exception e) {
            e.printStackTrace();
          }
          finally
          {
  
          }
  
          }
        }
  
  
  
  
  I got this error when debugging
  
  I
  
      public[B@f73c1
      private[B@15b9e68
      javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes
          at com.sun.crypto.provider.RSACipher.a(DashoA13*..)
          at com.sun.crypto.provider.RSACipher.engineDoFinal(DashoA13*..)
          at javax.crypto.Cipher.doFinal(DashoA13*..)
          at EncryptionDecryption.EncryptionUtil.encrypt(EncryptionUtil.java:122)
          at EncryptionDecryption.EncryptionUtil.main(EncryptionUtil.java:193)
      java.lang.IllegalArgumentException: Null input buffer
          at javax.crypto.Cipher.doFinal(DashoA13*..)
          at EncryptionDecryption.EncryptionUtil.decrypt(EncryptionUtil.java:147)
          at EncryptionDecryption.EncryptionUtil.main(EncryptionUtil.java:198)
      java.lang.NullPointerException
          at java.lang.String.&lt;init&gt;(String.java:593)
          at EncryptionDecryption.EncryptionUtil.decrypt(EncryptionUtil.java:153)
          at EncryptionDecryption.EncryptionUtil.main(EncryptionUtil.java:198)
  </code></pre>