日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 加密 压缩_如何用java 将文件加密压缩为zip文件.

發(fā)布時(shí)間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 加密 压缩_如何用java 将文件加密压缩为zip文件. 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

展開全部

用java加密壓62616964757a686964616fe4b893e5b19e31333337396237縮zip文件:

package com.ninemax.demo.zip.decrypt;

import java.io.File;

import java.io.IOException;

import java.util.List;

import java.util.zip.DataFormatException;

import org.apache.commons.io.FileUtils;

import de.idyl.winzipaes.AesZipFileDecrypter;

import de.idyl.winzipaes.AesZipFileEncrypter;

import de.idyl.winzipaes.impl.AESDecrypter;

import de.idyl.winzipaes.impl.AESDecrypterBC;

import de.idyl.winzipaes.impl.AESEncrypter;

import de.idyl.winzipaes.impl.AESEncrypterBC;

import de.idyl.winzipaes.impl.ExtZipEntry;

/**

* 壓縮指定文件或目錄為ZIP格式壓縮文件

* 支持中文(修改源碼后)

* 支持密碼(僅支持256bit的AES加密解密)

* 依賴bcprov項(xiàng)目(bcprov-jdk16-140.jar)

*

* @author zyh

*/

public class DecryptionZipUtil {

/**

* 使用指定密碼將給定文件或文件夾壓縮成指定的輸出ZIP文件

* @param srcFile 需要壓縮的文件或文件夾

* @param destPath 輸出路徑

* @param passwd 壓縮文件使用的密碼

*/

public static void zip(String srcFile,String destPath,String passwd) {

AESEncrypter encrypter = new AESEncrypterBC();

AesZipFileEncrypter zipFileEncrypter = null;

try {

zipFileEncrypter = new AesZipFileEncrypter(destPath, encrypter);

/**

* 此方法是修改源碼后添加,用以支持中文文件名

*/

zipFileEncrypter.setEncoding("utf8");

File sFile = new File(srcFile);

/**

* AesZipFileEncrypter提供了重載的添加Entry的方法,其中:

* add(File f, String passwd)

* 方法是將文件直接添加進(jìn)壓縮文件

*

* add(File f, String pathForEntry, String passwd)

* 方法是按指定路徑將文件添加進(jìn)壓縮文件

* pathForEntry - to be used for addition of the file (path within zip file)

*/

doZip(sFile, zipFileEncrypter, "", passwd);

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

zipFileEncrypter.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 具體壓縮方法,將給定文件添加進(jìn)壓縮文件中,并處理壓縮文件中的路徑

* @param file 給定磁盤文件(是文件直接添加,是目錄遞歸調(diào)用添加)

* @param encrypter AesZipFileEncrypter實(shí)例,用于輸出加密ZIP文件

* @param pathForEntry ZIP文件中的路徑

* @param passwd 壓縮密碼

* @throws IOException

*/

private static void doZip(File file, AesZipFileEncrypter encrypter,

String pathForEntry, String passwd) throws IOException {

if (file.isFile()) {

pathForEntry += file.getName();

encrypter.add(file, pathForEntry, passwd);

return;

}

pathForEntry += file.getName() + File.separator;

for(File subFile : file.listFiles()) {

doZip(subFile, encrypter, pathForEntry, passwd);

}

}

/**

* 使用給定密碼解壓指定壓縮文件到指定目錄

* @param inFile 指定Zip文件

* @param outDir 解壓目錄

* @param passwd 解壓密碼

*/

public static void unzip(String inFile, String outDir, String passwd) {

File outDirectory = new File(outDir);

if (!outDirectory.exists()) {

outDirectory.mkdir();

}

AESDecrypter decrypter = new AESDecrypterBC();

AesZipFileDecrypter zipDecrypter = null;

try {

zipDecrypter = new AesZipFileDecrypter(new File(inFile), decrypter);

AesZipFileDecrypter.charset = "utf-8";

/**

* 得到ZIP文件中所有Entry,但此處好像與JDK里不同,目錄不視為Entry

* 需要創(chuàng)建文件夾,entry.isDirectory()方法同樣不適用,不知道是不是自己使用錯(cuò)誤

* 處理文件夾問題處理可能不太好

*/

List entryList = zipDecrypter.getEntryList();

for(ExtZipEntry entry : entryList) {

String eName = entry.getName();

String dir = eName.substring(0, eName.lastIndexOf(File.separator) + 1);

File extractDir = new File(outDir, dir);

if (!extractDir.exists()) {

FileUtils.forceMkdir(extractDir);

}

/**

* 抽出文件

*/

File extractFile = new File(outDir + File.separator + eName);

zipDecrypter.extractEntry(entry, extractFile, passwd);

}

} catch (IOException e) {

e.printStackTrace();

} catch (DataFormatException e) {

e.printStackTrace();

} finally {

try {

zipDecrypter.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 測試

* @param args

*/

public static void main(String[] args) {

/**

* 壓縮測試

* 可以傳文件或者目錄

*/

//zip("M:\\ZIP\\test\\bb\\a\\t.txt", "M:\\ZIP\\test\\temp1.zip", "zyh");

//zip("M:\\ZIP\\test\\bb", "M:\\ZIP\\test\\temp2.zip", "zyh");

unzip("M:\\ZIP\\test\\temp2.zip", "M:\\ZIP\\test\\temp", "zyh");

}

}

壓縮多個(gè)文件時(shí),有兩個(gè)方法(第一種沒試):

(1) 預(yù)先把多個(gè)文件壓縮成zip,然后調(diào)用enc.addAll(inZipFile, password);方法將多個(gè)zip文件加進(jìn)來。

(2)針對需要壓縮的文件循環(huán)調(diào)用enc.add(inFile, password);,每次都用相同的密碼。

已贊過

已踩過<

你對這個(gè)回答的評價(jià)是?

評論

收起

總結(jié)

以上是生活随笔為你收集整理的java 加密 压缩_如何用java 将文件加密压缩为zip文件.的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。