import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

class Decryptor
{
    public static void main(String[] args) throws Exception
    {
        if(args.length < 1)
        {
            System.out.println("no filename to  decrypt");
            System.exit(-1);
        }
        byte[] b_key = new byte[16];

        FileInputStream fis_key = new FileInputStream("./public.key");
        fis_key.read(b_key);
        fis_key.close();

        SecretKeySpec dks = new SecretKeySpec(b_key, "AES");
        IvParameterSpec spec = new IvParameterSpec(dks.getEncoded());

        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

        SecureRandom sr = new SecureRandom();
        cipher.init(Cipher.DECRYPT_MODE, dks, spec, sr);

        String Name = args[0];
        FileInputStream fis = new FileInputStream(new File(Name));
        FileOutputStream fos = new FileOutputStream(new File(Name + "_decr"));
        byte[] b = new byte[2064];
        while (fis.read(b) != -1)
        {
            byte[] bb = cipher.doFinal(b);
            System.out.printf(".");
            fos.write(bb);
        }
        System.out.printf("\n");
        fos.close();
        fis.close();
    }
};
