package AES.test; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import java.security.spec.KeySpec; import javax.crypto.*; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.SecretKeySpec; public class AESFileDecryption { public static void main(String[] args) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { String password = "javapapers"; // reading the salt // user should have secure mechanism to transfer the // salt, iv and password to the recipient FileInputStream saltFis = new FileInputStream("D:\\IDEA_SPACE\\test4-1\\mavnetest001\\target\\test\\upload\\salt.enc"); byte[] salt = new byte[8]; saltFis.read(salt); saltFis.close(); // reading the iv FileInputStream ivFis = new FileInputStream("D:\\IDEA_SPACE\\test4-1\\mavnetest001\\target\\test\\upload\\iv.enc"); byte[] iv = new byte[16]; ivFis.read(iv); ivFis.close(); SecretKeyFactory factory = SecretKeyFactory .getInstance("PBKDF2WithHmacSHA1"); KeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt, 65536, 256); SecretKey tmp = factory.generateSecret(keySpec); SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES"); // file decryption Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, secret, new IvParameterSpec(iv)); FileInputStream fis = new FileInputStream("D:\\IDEA_SPACE\\test4-1\\mavnetest001\\target\\test\\upload\\encryptedfile.des"); FileOutputStream fos = new FileOutputStream("D:\\IDEA_SPACE\\test4-1\\mavnetest001\\target\\test\\upload\\plainfile_decrypted.txt"); byte[] in = new byte[64]; int read; while ((read = fis.read(in)) != -1) { byte[] output = cipher.update(in, 0, read); if (output != null) fos.write(output); } byte[] output = cipher.doFinal(); if (output != null) fos.write(output); fis.close(); fos.flush(); fos.close(); System.out.println("File Decrypted."); } }
AES解密
最新推荐文章于 2024-03-27 16:56:20 发布