import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class FileEncAndDec {
private static final int numOfEncAndDec = 0x88; //
加密解密秘钥
private static int dataOfFile = 0; // 文件字节内容
private static int beatchLength = 8196;//批量加密的字符长度单位
private static int encEndIndex = 10;//批量加密的前多少字节
public static void main(String[] args) {
try
{
File srcFile = new File("D:\\a.txt"); // 初始文件
File encFile = new File("D:\\b.txt"); // 加密文件
File decFile = new File("D:\\c.txt"); // 解密文件
encFile(srcFile, encFile);//加密操作(适合文本文件、内容不超过1M)
decFile(encFile,decFile);//解密操作
srcFile = new File("D:\\a.zip"); // 初始文件
encFile = new File("D:\\b.zip"); // 加密文件
decFile = new File("D:\\c.zip"); // 解密文件
encFileQuickly(srcFile, encFile);//快速加密操作(适合于大文件、图片等)
decFileQuickly(encFile,decFile);//快速解密操作
} catch (Exception e) {
e.printStackTrace();
}
}
public static void encFile(File srcFile, File encFile) throws
Exception {
long start = System.currentTimeMillis();
if (!srcFile.exists()) {
System.out.println("source file not exixt");
return;
}
if (!encFile.exists()) {
System.out.println("encrypt file created");
encFile.createNewFile();
}
encAndDecFile(srcFile,encFile,true);
System.out.println("enc
time:"+(System.currentTimeMillis()-start));
}
public static void encFileQuickly(File srcFile, File encFile)
throws Exception {
long start = System.currentTimeMillis();
if (!srcFile.exists()) {
System.out.println("source file not exixt");
return;
}
if (!encFile.exists()) {
System.out.println("encrypt file created");
encFile.createNewFile();
}
encAndDecFile(srcFile,encFile,false);
System.out.println("enc quickly
time:"+(System.currentTimeMillis()-start));
}
public static void decFile(File encFile, File decFile) throws
Exception {
long start = System.currentTimeMillis();
if (!encFile.exists()) {
System.out.println("encrypt file not exixt");
return;
}
if (!decFile.exists()) {
System.out.println("decrypt file created");
decFile.createNewFile();
}
encAndDecFile(encFile,decFile,true);
System.out.println("dec
time:"+(System.currentTimeMillis()-start));
}
public static void decFileQuickly(File encFile, File decFile)
throws Exception {
long start = System.currentTimeMillis();
if (!encFile.exists()) {
System.out.println("encrypt file not exixt");
return;
}
if (!decFile.exists()) {
System.out.println("decrypt file created");
decFile.createNewFile();
}
encAndDecFile(encFile,decFile,false);
System.out.println("dec quickly
time:"+(System.currentTimeMillis()-start));
}
private static void encAndDecFile(File srcFile, File
targetFile,Boolean full) throws IOException
{
InputStream fis = new FileInputStream(srcFile);
OutputStream fos = new FileOutputStream(targetFile);
if(full) {
while ((dataOfFile = fis.read()) > -1) {
fos.write(dataOfFile ^ numOfEncAndDec);
}
}else {
byte[] buff = new byte[beatchLength];
while ((dataOfFile = fis.read(buff)) > -1) {
for (int i = 0; i
buff[i] = (byte) (buff[i]^numOfEncAndDec);
}
fos.write(buff, 0, dataOfFile);
}
}
fos.flush();
cleanStream(fis,fos);
}
private static void cleanStream(Closeable ... ios) throws
IOException
{
if(ios == null)
{
return;
}
for(Closeable io:ios)
{
io.close();
}
}
}