java使用Base64实现文件加密解密

 更新时间:2019年03月28日 11:46:28   作者:简简单2783  
这篇文章主要为大家详细介绍了java实现Base64给文件加密、解密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Java实现Base64给文件加密、解密的具体代码,供大家参考,具体内容如下

package test.base64;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* 服务器之间传递图片
*/
public class TestCase {
 
public static void main(String[] args) {
// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
String strImg = GetImageStr();
System.out.println(strImg);
// 对字节数组字符串进行Base64解码并生成图片
GenerateImage(strImg);
}
public static String GetImageStr() {
String imgFile = "d:\\java.pdf";// 待处理的图片
InputStream in = null;
byte[] data = null;
// 读取图片字节数组
try {
in = new FileInputStream(imgFile);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
// 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);// 返回Base64编码过的字节数组字符串
}
public static boolean GenerateImage(String imgStr) {
if (imgStr == null){ // 图像数据为空
return false;
}
BASE64Decoder decoder = new BASE64Decoder();
try {
// Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {// 调整异常数据
b[i] += 256;
}
}
// 生成jpg图片
String imgFilePath = "d:\\new.pdf"; // 新生成的图片
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
return true;
} catch (Exception e) {
return false;
}
}
}

小编另分享一段java代码实现对文件的base64加密解密

Base64编码方法:将每三个8bit的字节转换为四个6bit的字节,其中,转换之后的这四个字节中每6个有效Bbit为有效数据,空余的那2个用0补上成为一个字节,java中可直接调用算法进行base64加密解密。

public class base64 {

  public static void main(String[] args){
    File file = new File("D:\\base64.txt");
    String result = getFromBase64(file2String(file));
    System.out.println(result);
  }

  //文件转字符串
  public static String file2String(File file){
    try {
      BufferedReader buffer = new BufferedReader(new FileReader(file));
      StringBuilder sb = new StringBuilder();
      String temp;
      while((temp = buffer.readLine()) !=null ){
        sb.append(temp);

      }
      return sb.toString();
    } catch (FileNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return null;
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return null;
    }
  }
  //加密
  public static String getBase64(String str){
    byte[] b = null;
    String s = null;
    try {
      b = str.getBytes("utf-8");
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }
    if( b != null){
       s = new BASE64Encoder().encode(b);
    }
    return s;

  }

  //解密
  public static String getFromBase64(String str){
    byte[] b = null;
    String result = null;
    if(str != null){
       BASE64Decoder decoder = new BASE64Decoder(); 
       try { 
          b = decoder.decodeBuffer(str); 
          result = new String(b, "utf-8"); 
        } catch (Exception e) { 
          e.printStackTrace(); 
        } 
    }
    return result;
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • ArrayList与linkedList的用法区别及扩容方式

    ArrayList与linkedList的用法区别及扩容方式

    这篇文章主要介绍了ArrayList与linkedList的用法区别及扩容方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Java 中解决Unsupported major.minor version 51.0的问题

    Java 中解决Unsupported major.minor version 51.0的问题

    本文主要介绍解决Unsupported major.minor version 51.0的问题, 这里给大家整理了详细资料,有需要的小伙伴可以参考下
    2016-08-08
  • java的各种集合为什么不安全(List、Set、Map)以及代替方案

    java的各种集合为什么不安全(List、Set、Map)以及代替方案

    这篇文章主要介绍了java的各种集合为什么不安全(List、Set、Map)以及代替方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Java简单模拟实现一个线程池

    Java简单模拟实现一个线程池

    本文主要介绍了Java简单模拟实现一个线程池,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • 强烈推荐IDEA提高开发效率的必备插件

    强烈推荐IDEA提高开发效率的必备插件

    这篇文章主要介绍了强烈推荐IDEA提高开发效率的必备插件,文中有非常详细的图文示例,对想要提高企业开发效率的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • MyBatisPlus 一对多、多对一、多对多的完美解决方案

    MyBatisPlus 一对多、多对一、多对多的完美解决方案

    这篇文章主要介绍了MyBatisPlus 一对多、多对一、多对多的完美解决方案,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 单例模式 分析代码优化方法

    单例模式 分析代码优化方法

    这篇文章主要介绍了单例模式 分析代码优化方法,需要的朋友可以参考下
    2015-04-04
  • 使用Apache Ignite实现Java数据网格

    使用Apache Ignite实现Java数据网格

    今天我们来探讨如何使用Apache Ignite来实现Java数据网格,Apache Ignite是一个高性能的内存计算平台,它提供了分布式缓存、数据网格和计算功能,可以显著提高大规模应用的数据处理性能,感兴趣的小伙伴跟着小编一起来看看吧
    2024-08-08
  • 浅谈Mybatis获取参数值的方式

    浅谈Mybatis获取参数值的方式

    本文主要介绍了Mybatis获取参数值的方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • java编程之递归算法总结

    java编程之递归算法总结

    这篇文章主要介绍了java编程之递归算法总结,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11

最新评论