扩张zip4j内存加密压缩包
扩展zip4j内存加密压缩包
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.io.ZipOutputStream;
import net.lingala.zip4j.model.ZipModel;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;
import net.lingala.zip4j.zip.ZipEngine;
public class Test extends ZipEngine{
private ZipModel zipModel;
public Test(ZipModel zipModel) throws ZipException {
super(zipModel);
this.zipModel=zipModel;
}
/**
* @param args
*/
public static void main(String[] args) {
TestSendAttatch att=null;
try {
att = new TestSendAttatch(new ZipModel());
att.doZipEnc();
System.out.println("成功");
} catch (Exception e) {
System.out.println("失败");
e.printStackTrace();
}
}
public void doZipEnc() {
try {
//将压缩流写到内存
ByteArrayOutputStream saos = new ByteArrayOutputStream();
//本地测试
FileOutputStream f = new FileOutputStream("d:\\test1.zip" ,true);
for(int i=0;i<1;i++){
String passwd = "111";
ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); // 压缩方式
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); // 压缩级别
parameters.setSourceExternalStream(true);
parameters.setFileNameInZip("aaaa_"+i+".xls");//后缀可以更改的
if (!"".equals(passwd)) {
parameters.setEncryptFiles(true);
parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD); // 加密方式
parameters.setPassword(passwd.toCharArray());
}
addNewStreamToZipTmp(saos, parameters);
}
saos.writeTo(f);
f.close();
saos.close();
//文件大小
System.out.println("size:" +(saos.toByteArray().length/1024));
} catch (Exception e) {
e.printStackTrace();
}
}
public void addNewStreamToZipTmp(ByteArrayOutputStream baos,ZipParameters parameters) throws ZipException {
ZipOutputStream outputStream = null;
try {
outputStream = new ZipOutputStream(baos, this.zipModel);
if (zipModel.getEndCentralDirRecord() == null) {
throw new ZipException("invalid end of central directory record");
}
checkParameters(parameters);
outputStream.putNextEntry(null, parameters);
if (!parameters.getFileNameInZip().endsWith("/")
&& !parameters.getFileNameInZip().endsWith("\\")) {
for (int i = 0; i < 10; i++) {
outputStream.write("ccccccccccccccccccccc".getBytes());
outputStream.flush();
}
}
outputStream.closeEntry();
outputStream.finish();
} catch (ZipException e) {
throw e;
} catch (Exception e) {
throw new ZipException(e);
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
}
}
}
}
private void checkParameters(ZipParameters parameters) throws ZipException {
if (parameters == null) {
throw new ZipException("cannot validate zip parameters");
}
if ((parameters.getCompressionMethod() != Zip4jConstants.COMP_STORE) &&
parameters.getCompressionMethod() != Zip4jConstants.COMP_DEFLATE) {
throw new ZipException("unsupported compression type");
}
if (parameters.getCompressionMethod() == Zip4jConstants.COMP_DEFLATE) {
if (parameters.getCompressionLevel() < 0 && parameters.getCompressionLevel() > 9) {
throw new ZipException("invalid compression level. compression level dor deflate should be in the range of 0-9");
}
}
if (parameters.isEncryptFiles()) {
if (parameters.getEncryptionMethod() != Zip4jConstants.ENC_METHOD_STANDARD &&
parameters.getEncryptionMethod() != Zip4jConstants.ENC_METHOD_AES) {
throw new ZipException("unsupported encryption method");
}
if (parameters.getPassword() == null || parameters.getPassword().length <= 0) {
throw new ZipException("input password is empty or null");
}
} else {
parameters.setAesKeyStrength(-1);
parameters.setEncryptionMethod(-1);
}
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.io.ZipOutputStream;
import net.lingala.zip4j.model.ZipModel;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;
import net.lingala.zip4j.zip.ZipEngine;
public class Test extends ZipEngine{
private ZipModel zipModel;
public Test(ZipModel zipModel) throws ZipException {
super(zipModel);
this.zipModel=zipModel;
}
/**
* @param args
*/
public static void main(String[] args) {
TestSendAttatch att=null;
try {
att = new TestSendAttatch(new ZipModel());
att.doZipEnc();
System.out.println("成功");
} catch (Exception e) {
System.out.println("失败");
e.printStackTrace();
}
}
public void doZipEnc() {
try {
//将压缩流写到内存
ByteArrayOutputStream saos = new ByteArrayOutputStream();
//本地测试
FileOutputStream f = new FileOutputStream("d:\\test1.zip" ,true);
for(int i=0;i<1;i++){
String passwd = "111";
ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); // 压缩方式
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); // 压缩级别
parameters.setSourceExternalStream(true);
parameters.setFileNameInZip("aaaa_"+i+".xls");//后缀可以更改的
if (!"".equals(passwd)) {
parameters.setEncryptFiles(true);
parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD); // 加密方式
parameters.setPassword(passwd.toCharArray());
}
addNewStreamToZipTmp(saos, parameters);
}
saos.writeTo(f);
f.close();
saos.close();
//文件大小
System.out.println("size:" +(saos.toByteArray().length/1024));
} catch (Exception e) {
e.printStackTrace();
}
}
public void addNewStreamToZipTmp(ByteArrayOutputStream baos,ZipParameters parameters) throws ZipException {
ZipOutputStream outputStream = null;
try {
outputStream = new ZipOutputStream(baos, this.zipModel);
if (zipModel.getEndCentralDirRecord() == null) {
throw new ZipException("invalid end of central directory record");
}
checkParameters(parameters);
outputStream.putNextEntry(null, parameters);
if (!parameters.getFileNameInZip().endsWith("/")
&& !parameters.getFileNameInZip().endsWith("\\")) {
for (int i = 0; i < 10; i++) {
outputStream.write("ccccccccccccccccccccc".getBytes());
outputStream.flush();
}
}
outputStream.closeEntry();
outputStream.finish();
} catch (ZipException e) {
throw e;
} catch (Exception e) {
throw new ZipException(e);
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
}
}
}
}
private void checkParameters(ZipParameters parameters) throws ZipException {
if (parameters == null) {
throw new ZipException("cannot validate zip parameters");
}
if ((parameters.getCompressionMethod() != Zip4jConstants.COMP_STORE) &&
parameters.getCompressionMethod() != Zip4jConstants.COMP_DEFLATE) {
throw new ZipException("unsupported compression type");
}
if (parameters.getCompressionMethod() == Zip4jConstants.COMP_DEFLATE) {
if (parameters.getCompressionLevel() < 0 && parameters.getCompressionLevel() > 9) {
throw new ZipException("invalid compression level. compression level dor deflate should be in the range of 0-9");
}
}
if (parameters.isEncryptFiles()) {
if (parameters.getEncryptionMethod() != Zip4jConstants.ENC_METHOD_STANDARD &&
parameters.getEncryptionMethod() != Zip4jConstants.ENC_METHOD_AES) {
throw new ZipException("unsupported encryption method");
}
if (parameters.getPassword() == null || parameters.getPassword().length <= 0) {
throw new ZipException("input password is empty or null");
}
} else {
parameters.setAesKeyStrength(-1);
parameters.setEncryptionMethod(-1);
}
}
}