zoukankan      html  css  js  c++  java
  • 关于文档的加密与解密问题---代码

      1 package com.copy.encrypt;
      2 import java.io.File;
      3 import java.io.FileInputStream;
      4 import java.io.FileNotFoundException;
      5 import java.io.FileOutputStream;
      6 import java.io.IOException;
      7 import java.io.InputStream;
      8 import java.io.OutputStream;
      9 import java.io.RandomAccessFile;
     10 public class FileEncryptAndDecrypt {
     11   /**
     12    * 文件file进行加密
     13    * @param fileUrl 文件路径
     14    * @param key 密码
     15    * @throws Exception
     16    */
     17   public static void encrypt(String fileUrl, String key) throws Exception {
     18     File file = new File(fileUrl);
     19     String path = file.getPath();
     20     if(!file.exists()){
     21       return;
     22     }
     23     int index = path.lastIndexOf("\");
     24     String destFile = path.substring(0, index)+"\"+"abc";
     25     File dest = new File(destFile);
     26     InputStream in = new FileInputStream(fileUrl);
     27     OutputStream out = new FileOutputStream(destFile);
     28     byte[] buffer = new byte[1024];
     29     int r;
     30     byte[] buffer2=new byte[1024];
     31     while (( r= in.read(buffer)) > 0) {
     32         for(int i=0;i<r;i++)
     33         {
     34           byte b=buffer[i];
     35           buffer2[i]=b==255?0:++b;
     36         }
     37         out.write(buffer2, 0, r);
     38         out.flush();
     39     }
     40     in.close();
     41     out.close();
     42     file.delete();
     43     dest.renameTo(new File(fileUrl));
     44     appendMethodA(fileUrl, key);
     45     System.out.println("加密成功");
     46   }
     47   /**
     48    *
     49    * @param fileName
     50    * @param content 密钥
     51    */
     52    public static void appendMethodA(String fileName, String content) {
     53       try {
     54         // 打开一个随机访问文件流,按读写方式
     55         RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
     56         // 文件长度,字节数
     57         long fileLength = randomFile.length();
     58         //将写文件指针移到文件尾。
     59         randomFile.seek(fileLength);
     60         randomFile.writeBytes(content);
     61         randomFile.close();
     62       } catch (IOException e) {
     63         e.printStackTrace();
     64       }
     65    }
     66    /**
     67    * 解密
     68    * @param fileUrl 源文件
     69    * @param tempUrl 临时文件
     70    * @param ketLength 密码长度
     71    * @return
     72    * @throws Exception
     73    */
     74    public static String decrypt(String fileUrl, String tempUrl, int keyLength) throws Exception{
     75       File file = new File(fileUrl);
     76       if (!file.exists()) {
     77         return null;
     78       }
     79       File dest = new File(tempUrl);
     80       if (!dest.getParentFile().exists()) {
     81         dest.getParentFile().mkdirs();
     82       }
     83       InputStream is = new FileInputStream(fileUrl);
     84       OutputStream out = new FileOutputStream(tempUrl);
     85       byte[] buffer = new byte[1024];
     86       byte[] buffer2=new byte[1024];
     87       byte bMax=(byte)255;
     88       long size = file.length() - keyLength;
     89       int mod = (int) (size%1024);
     90       int div = (int) (size>>10);
     91       int count = mod==0?div:(div+1);
     92       int k = 1, r;
     93       while ((k <= count && ( r = is.read(buffer)) > 0)) {
     94         if(mod != 0 && k==count) {
     95           r = mod;
     96         }
     97         for(int i = 0;i < r;i++)
     98         {
     99           byte b=buffer[i];
    100           buffer2[i]=b==0?bMax:--b;
    101         }
    102         out.write(buffer2, 0, r);
    103         k++;
    104       }
    105       out.close();
    106       is.close();
    107       return tempUrl;
    108     }
    109    /**
    110    * 判断文件是否加密
    111    * @param fileName
    112    * @return
    113    */
    114    public static String readFileLastByte(String fileName, int keyLength) {
    115      File file = new File(fileName);
    116      if(!file.exists())return null;
    117      StringBuffer str = new StringBuffer();
    118       try {
    119         // 打开一个随机访问文件流,按读写方式
    120         RandomAccessFile randomFile = new RandomAccessFile(fileName, "r");
    121         // 文件长度,字节数
    122         long fileLength = randomFile.length();
    123         //将写文件指针移到文件尾。
    124         for(int i = keyLength ; i>=1 ; i--){
    125           randomFile.seek(fileLength-i);
    126           str.append((char)randomFile.read());
    127         }
    128         randomFile.close();
    129         return str.toString();
    130       } catch (IOException e) {
    131         e.printStackTrace();
    132       }
    133       return null;
    134      }
    135 }
    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 {
      /**
       * 文件file进行加密
       * @param fileUrl 文件路径
       * @param key 密码
       * @throws Exception
       */
      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("加密成功");
      }
      /**
       *
       * @param fileName
       * @param content 密钥
       */
       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();
          }
       }
       /**
       * 解密
       * @param fileUrl 源文件
       * @param tempUrl 临时文件
       * @param ketLength 密码长度
       * @return
       * @throws Exception
       */
       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;
        }
       /**
       * 判断文件是否加密
       * @param fileName
       * @return
       */
       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;
         }
    }
  • 相关阅读:
    POJ1475 Pushing Boxes 华丽丽的双重BFS
    POJ3322 Bloxorz I 无脑广搜(我死了。。。)
    CH2401 送礼物 双向搜索
    POJ2248 Addition Chains 迭代加深
    POJ3074 Sudoku 剪枝深(神?)搜
    Luogu P1120 小木棍 [数据加强版] 来来来我们一起来剪枝,剪枝,剪枝、、、
    Luogu P4095 [HEOI2013]Eden 的新背包问题 思维/动规
    Luogu P5201 [USACO19JAN]Shortcut 最短路树???
    Luogu P5122 [USACO18DEC]Fine Dining 最短路
    Luogu P1608 路径统计 最短路计数
  • 原文地址:https://www.cnblogs.com/lijianli/p/9680002.html
Copyright © 2011-2022 走看看