应用AES算法对文件进行加密/解密的操作(JAVA)
使用AES算法对文件进行加密/解密的操作(JAVA)
很简单,直接上代码。
/** * 初始化 AES Cipher * @param sKey * @param cipherMode * @return */ public Cipher initAESCipher(String sKey, int cipherMode) { //创建Key gen KeyGenerator keyGenerator = null; Cipher cipher = null; try { keyGenerator = KeyGenerator.getInstance("AES"); keyGenerator.init(128, new SecureRandom(sKey.getBytes())); SecretKey secretKey = keyGenerator.generateKey(); byte[] codeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(codeFormat, "AES"); cipher = Cipher.getInstance("AES"); //初始化 cipher.init(cipherMode, key); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (NoSuchPaddingException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (InvalidKeyException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } return cipher; }
/** * 对文件进行AES加密 * @param sourceFile * @param fileType * @param sKey * @return */ public File encryptFile(File sourceFile,String fileType, String sKey){ //新建临时加密文件 File encrypfile = null; InputStream inputStream = null; OutputStream outputStream = null; try { inputStream = new FileInputStream(sourceFile); encrypfile = File.createTempFile(sourceFile.getName(), fileType); outputStream = new FileOutputStream(encrypfile); Cipher cipher = initAESCipher(sKey,Cipher.ENCRYPT_MODE); //以加密流写入文件 CipherInputStream cipherInputStream = new CipherInputStream(inputStream, cipher); byte[] cache = new byte[1024]; int nRead = 0; while ((nRead = cipherInputStream.read(cache)) != -1) { outputStream.write(cache, 0, nRead); outputStream.flush(); } cipherInputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } finally { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } return encrypfile; }
/** * AES方式解密文件 * @param sourceFile * @return */ public File decryptFile(File sourceFile,String fileType,String sKey){ File decryptFile = null; InputStream inputStream = null; OutputStream outputStream = null; try { decryptFile = File.createTempFile(sourceFile.getName(),fileType); Cipher cipher = initAESCipher(sKey,Cipher.DECRYPT_MODE); inputStream = new FileInputStream(sourceFile); outputStream = new FileOutputStream(decryptFile); CipherOutputStream cipherOutputStream = new CipherOutputStream(outputStream, cipher); byte [] buffer = new byte [1024]; int r; while ((r = inputStream.read(buffer)) >= 0) { cipherOutputStream.write(buffer, 0, r); } cipherOutputStream.close(); } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. }finally { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } return decryptFile; }