文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java实现文件的加密解密功能示例

2023-05-31 01:24

关注

本文实例讲述了Java实现文件的加密解密功能分享给大家供大家参考,具体如下:

package com.copy.encrypt;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.RandomAccessFile;public class FileEncryptAndDecrypt {    public static void encrypt(String fileUrl, String key) throws Exception {    File file = new File(fileUrl);    String path = file.getPath();    if(!file.exists()){      return;    }    int index = path.lastIndexOf("\\");    String destFile = path.substring(0, index)+"\\"+"abc";    File dest = new File(destFile);    InputStream in = new FileInputStream(fileUrl);    OutputStream out = new FileOutputStream(destFile);    byte[] buffer = new byte[1024];    int r;    byte[] buffer2=new byte[1024];    while (( r= in.read(buffer)) > 0) {        for(int i=0;i<r;i++)        {          byte b=buffer[i];          buffer2[i]=b==255?0:++b;        }        out.write(buffer2, 0, r);        out.flush();    }    in.close();    out.close();    file.delete();    dest.renameTo(new File(fileUrl));    appendMethodA(fileUrl, key);    System.out.println("加密成功");  }     public static void appendMethodA(String fileName, String content) {      try {        // 打开一个随机访问文件流,按读写方式        RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");        // 文件长度,字节数        long fileLength = randomFile.length();        //将写文件指针移到文件尾。        randomFile.seek(fileLength);        randomFile.writeBytes(content);        randomFile.close();      } catch (IOException e) {        e.printStackTrace();      }   }      public static String decrypt(String fileUrl, String tempUrl, int keyLength) throws Exception{      File file = new File(fileUrl);      if (!file.exists()) {        return null;      }      File dest = new File(tempUrl);      if (!dest.getParentFile().exists()) {        dest.getParentFile().mkdirs();      }      InputStream is = new FileInputStream(fileUrl);      OutputStream out = new FileOutputStream(tempUrl);      byte[] buffer = new byte[1024];      byte[] buffer2=new byte[1024];      byte bMax=(byte)255;      long size = file.length() - keyLength;      int mod = (int) (size%1024);      int div = (int) (size>>10);      int count = mod==0?div:(div+1);      int k = 1, r;      while ((k <= count && ( r = is.read(buffer)) > 0)) {        if(mod != 0 && k==count) {          r = mod;        }        for(int i = 0;i < r;i++)        {          byte b=buffer[i];          buffer2[i]=b==0?bMax:--b;        }        out.write(buffer2, 0, r);        k++;      }      out.close();      is.close();      return tempUrl;    }      public static String readFileLastByte(String fileName, int keyLength) {     File file = new File(fileName);     if(!file.exists())return null;     StringBuffer str = new StringBuffer();      try {        // 打开一个随机访问文件流,按读写方式        RandomAccessFile randomFile = new RandomAccessFile(fileName, "r");        // 文件长度,字节数        long fileLength = randomFile.length();        //将写文件指针移到文件尾。        for(int i = keyLength ; i>=1 ; i--){          randomFile.seek(fileLength-i);          str.append((char)randomFile.read());        }        randomFile.close();        return str.toString();      } catch (IOException e) {        e.printStackTrace();      }      return null;     }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯