溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java實現文件的加密解密功能示例

發(fā)布時間:2020-10-05 22:05:15 來源:腳本之家 閱讀:190 作者:FC WORLD!!! 欄目:編程語言

本文實例講述了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 {
  /**
   * 文件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");
        // 文件長度,字節(jié)數
        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");
        // 文件長度,字節(jié)數
        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;
     }
}

PS:關于加密解密感興趣的朋友還可以參考本站在線工具:

文字在線加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode

MD5在線加密工具:
http://tools.jb51.net/password/CreateMD5Password

在線散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt

在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha

在線sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode

更多關于java相關內容感興趣的讀者可查看本站專題:《Java數學運算技巧總結》、《Java數據結構與算法教程》、《Java字符與字符串操作技巧總結》、《java日期與時間操作技巧匯總》、《Java操作DOM節(jié)點技巧總結》和《Java緩存操作技巧匯總》

希望本文所述對大家java程序設計有所幫助。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI