对文件加密、解密。支持各种格式的文件

先看效果

**可以看到加密之后内容为一串类似于乱码之类的
解密之后又恢复为原内容**

直接上代码:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import java.util.Arrays;import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
/*** @author ZSL* @since 2016年12月7日上午10:18:27* @desc [文件加密]*/
public class AESFileUtil {private static final String key = "password";/** * init AES Cipher* @param passsword* @param cipherMode * @return */public static Cipher initAESCipher(String passsword, int cipherMode) {Cipher cipher = null;try {SecretKey key = getKey(passsword);cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");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;}private static SecretKey getKey(String password) {int keyLength = 256;byte[] keyBytes = new byte[keyLength / 8];SecretKeySpec key = null;try {Arrays.fill(keyBytes, (byte) 0x0);Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());byte[] passwordBytes = password.getBytes("UTF-8");int length = passwordBytes.length < keyBytes.length ? passwordBytes.length : keyBytes.length;System.arraycopy(passwordBytes, 0, keyBytes, 0, length);key = new SecretKeySpec(keyBytes, "AES");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return key;}/*** AES 加密* @param encryptPath* @param decryptPath* @param sKey* @return*/public static boolean encryptFile(String encryptPath, String decryptPath, String sKey){File encryptFile = null;File decryptfile = null;CipherOutputStream cipherOutputStream = null;BufferedInputStream bufferedInputStream = null;try {encryptFile = new File(encryptPath);if(!encryptFile.exists()) {throw  new NullPointerException("Encrypt file is empty");}decryptfile = new File(decryptPath);if(decryptfile.exists()) {decryptfile.delete();}decryptfile.createNewFile();Cipher cipher = initAESCipher(sKey, Cipher.ENCRYPT_MODE);cipherOutputStream = new CipherOutputStream(new FileOutputStream(decryptfile), cipher);bufferedInputStream = new BufferedInputStream(new FileInputStream(encryptFile));byte[] buffer = new byte[1024];int bufferLength;while ((bufferLength = bufferedInputStream.read(buffer)) != -1) {cipherOutputStream.write(buffer, 0, bufferLength);}bufferedInputStream.close();cipherOutputStream.close();
//            delFile(encryptPath);}  catch (IOException e) {delFile(decryptfile.getAbsolutePath());e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.return false;}return true;}/*** AES 解密* @param encryptPath* @param decryptPath* @param mKey* @return*/public static boolean decryptFile(String encryptPath, String decryptPath, String mKey){File encryptFile = null;File decryptFile = null;BufferedOutputStream outputStream = null;CipherInputStream inputStream = null;try {encryptFile = new File(encryptPath);if(!encryptFile.exists()) {throw new NullPointerException("Decrypt file is empty");}decryptFile = new File(decryptPath);if(decryptFile.exists()) {decryptFile.delete();}decryptFile.createNewFile();Cipher cipher = initAESCipher(mKey, Cipher.DECRYPT_MODE);outputStream = new BufferedOutputStream(new FileOutputStream(decryptFile));inputStream = new CipherInputStream(new FileInputStream(encryptFile), cipher);int bufferLength;byte[] buffer = new byte[1024];while ((bufferLength = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, bufferLength);}inputStream.close();outputStream.close();
//            delFile(encryptPath);} catch (IOException e) {delFile(decryptFile.getAbsolutePath());e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.return false;}return true;}/*** delete File* @param pathFile* @return*/public static boolean delFile(String pathFile) {boolean flag = false;if(pathFile == null && pathFile.length() <= 0) {throw new NullPointerException("文件不能为空");}else {File file = new File(pathFile);// 路径为文件且不为空则进行删除if (file.isFile() && file.exists()) {file.delete();flag = true;}}return flag;}public static void main(String[] args) {boolean flag = AESFileUtil.encryptFile("E:/pdf/html/原文件.txt", "E:/pdf/html/加密后.txt", key);System.out.println(flag);flag = AESFileUtil.decryptFile( "E:/pdf/html/加密后.txt","E:/pdf/html/解密后.txt", key);System.out.println(flag);}}

注意:如果出现以下问题

原因: Oracle在其官方网站上提供了无政策限制权限文件(Unlimited Strength Jurisdiction Policy Files),我们只需要将其部署在JRE环境中,就可以解决限制问题。

解决办法:

jdk6无政策限制权限文件下载
jdk7无政策限制权限文件下载
jdk8无政策限制权限文件下载

把下载好的文件解压出来,放到 java\jdk\jre\lib\security下
一个文件是:local_policy.jar
另一个是:US_export_policy.jar
OK!

文件AES加密、解密相关推荐

  1. php文件aes128解密工具,aes加密解密

    aes加密解密类 使用方法:$str = Aes:: encrypt(json_encode(array('111'=>'test')),$key); 文件:<?php class Aes ...

  2. C#实现AES算法对文件的加密解密

    本文实现了C#内置的AES算法对文件进行加密解密.有关AES的介绍不再赘述,主要讲如何实现文件的加密解密.项目工程源代码下载 网上的实现基本上都是要16,24或32位密码,密钥向量也要16位,都固定死 ...

  3. java 文件 加解密_Java实现文件的加密解密功能示例

    Java实现文件的加密解密功能示例 发布时间:2020-10-05 22:05:15 来源:脚本之家 阅读:86 作者:FC WORLD!!! 本文实例讲述了Java实现文件的加密解密功能分享给大家供 ...

  4. C语言实现AES加密解密

    AES加密是美国联邦政府采用的一种块加密标准,如今已经被全世界广为使用.嵌入式开发中我们也经常会用到加密解密算法,如果没有硬件模块来实现,就需要用到C代码软件实现.下面介绍调用mbedTLS中的AES ...

  5. Javascript实现AES加密解密(ECB/CBC)

    环境配置 js文件https://code.google.com/archive/p/crypto-js/downloads 在线AES加密解密地址http://tool.chacuo.net/cry ...

  6. Python crypto模块实现RSA和AES加密解密

    Python crypto模块实现RSA和AES加密解密 Python的crypto是用于RSA加密解密,AES加密解密的. 一.RSA和AES简介 RSA加密算法是一种非对称加密算法.RSA 是19 ...

  7. ios java aes_PHP7 AES加密解密函数_兼容ios/andriod/java对等加解密

    **PHP7.0 7.1 7.2 7.3 AES对等加解密类 函数文件_兼容ios/andriod/java等** 由于新项目规划要求使用PHP7.2开发环境,但在部分新系统中仍需使用AES加解密方式 ...

  8. AES加密解密算法的C代码实现

     AES 加密解密的原理我就不说了, 弟兄们自己上百度去查, 文章很多. 我这里只列出从网上获取的代码的实现, 我修改了一些, 可以很方便的使用到你的代码里面. AES 比DES算法的强度更强.A ...

  9. aes加密算法python语言实现_C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]...

    原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...

  10. C#常用加密解密方法(AES加密解密)

    在日常开发过程中,总会遇到需要加密解密的需求,这里我整理了C#常用的加密解密方法分享给大家. 先看看加密的基本概念: "加密",是一种限制对网络上传输数据的访问权的技术.原始数据( ...

最新文章

  1. ConditionedActivityGroup
  2. 关于A+B+C问题4种语言的解决办法,Java、C语言、C++、Python
  3. Java Web学习总结(23)——Distributed Configuration Management Platform(分布式配置管理平台)
  4. 操作系统--设备管理
  5. [Ext JS 4] 实战之Grid, Tree Gird 动态添加行
  6. 关于AOP /IOC / DI
  7. Lucene.Net 2.3.1开发介绍 —— 一、接触Lucene.Net
  8. atitit. java跟php的比较..为什么大企业喜欢java 而不是php
  9. bean的生命周期——Spring对bean的管理(三)
  10. matlab 和 ampl 结合,优化模型与AMPL案例.ppt
  11. 学一点python基础
  12. 硬件保护和软件保护_什么是硬件保护?
  13. SpringBoot电商项目之购物车下单(沙箱支付)
  14. 开发测试环境 k8s node节点磁盘不足运维
  15. 单目标跟踪——【数据集基准】RGB数据集OTB / NFS / TrackingNet / LaSOT / GOT-10k / UAV123 / VOT 简介
  16. java转go之初体验(一)
  17. 聚焦2019世界人工智能大会:看马斯克、马云“唇枪舌战”,谁更胜一筹?
  18. Struts2遇到的一个bug(对于与上下文路径[/WebStruts2.3]关联的名称空间[/]和动作名称[hello],没有映射的Action。)
  19. Java IO用法详解
  20. arduino 舵机接线图_(四)arduino进阶:舵机的使用方法

热门文章

  1. 几个可以赚钱的调查问卷网站,适合想用手机挣零花钱的你
  2. 014智能仓储物流系统真的“智能”吗?
  3. B-样条曲线教程(B-spline Curves Notes)目录
  4. 10.8 富士康java开发 微信视频面试(HR+技术面 两个女面试官)
  5. (python)云模型判别函数
  6. java web 拍卖系统_基于jsp的拍卖系统-JavaEE实现拍卖系统 - java项目源码
  7. matlab 文本相似度,图像相似性搜索的MATLAB实现
  8. 扩展欧几里德算法计算乘法逆元详解
  9. 联通宽带显示dns服务器黄色,怎么查看联通宽带dns是否被劫持
  10. 企业ERP运维技巧(实操干货)