`
lupingui
  • 浏览: 157356 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JAVA 文件加解密

阅读更多

做网站有时会处理一些上传下载的文件。可能会用到加解密功能。以下是一个加解密方法。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import net.ezcom.common.conf.Conf;
import net.ezcom.common.time.TimeHandler;

/**
 * 加解密单元
 * @author lupingui
 * 2009-01-12 17:55:47
 */

public class EncryptDecrypt {
	
	//加解密KEY,这个不能变动,这里可以由任意的字符组成,尽量用特殊字符
	static final byte[] KEYVALUE = "".getBytes();	
	//读取字节的长度
	static final int BUFFERLEN = 512;
	//加密临时存储目录
	static final String TRANSIT_DIR_ENC =  "";
	//解密临时存储目录
	static final String TRANSIT_DIR_DEC =  "";
		
	/**
	 * 文件加密
	 * @param oldFile:待加密文件
	 * @param saveFileName:加密后文件保存路径
	 * @return
	 * @throws IOException
	 */
	public static boolean encryptFile(File oldFile, String saveFileName) throws IOException{
		//如果传入的文件不存在或者不是文件则直接返回
		if (!oldFile.exists() || !oldFile.isFile()){			
			return false;
		}
		FileInputStream in = new FileInputStream(oldFile);
		//加密后存储的文件
		File file = new File(saveFileName);
		if (!file.exists()){
			return false;
		}
		//读取待加密文件加密后写入加密存储文件中
		FileOutputStream out = new FileOutputStream(file);
		int c, pos, keylen;
		pos = 0;
		keylen = KEYVALUE.length;
		byte buffer[] = new byte[BUFFERLEN];
		while ((c = in.read(buffer)) != -1) {
			for (int i = 0; i < c; i++) {
				buffer[i] ^= KEYVALUE[pos];
				out.write(buffer[i]);
				pos++;
				if (pos == keylen){
					pos = 0;
				}
			}
		}
		in.close();
		out.close();
		
		return true;
	}
	
	/**
	 * 文件加密
	 * @param oldFile:待加密文件
	 * @param saveFile:加密后的文件
	 * @return
	 * @throws IOException
	 */
	public static boolean encryptFile(File oldFile, File saveFile) throws IOException{
		//如果传入的文件不存在或者不是文件则直接返回
		if (!oldFile.exists() || !oldFile.isFile() || !saveFile.exists() || !saveFile.isFile()){			
			return false;
		}
		FileInputStream in = new FileInputStream(oldFile);
		//读取待加密文件加密后写入加密存储文件中
		FileOutputStream out = new FileOutputStream(saveFile);
		int c, pos, keylen;
		pos = 0;
		keylen = KEYVALUE.length;
		byte buffer[] = new byte[BUFFERLEN];
		while ((c = in.read(buffer)) != -1) {
			for (int i = 0; i < c; i++) {
				buffer[i] ^= KEYVALUE[pos];
				out.write(buffer[i]);
				pos++;
				if (pos == keylen){
					pos = 0;
				}
			}
		}
		in.close();
		out.close();
		
		return true;		
	}
	
	/**
	 * 文件加密
	 * @param oldFile:待加密文件
	 * @return
	 * @throws IOException
	 */
	public static File encryptFile(File oldFile) throws IOException{
		//如果传入的文件不存在或者不是文件则直接返回
		if (!oldFile.exists() || !oldFile.isFile()){
			
			return null;
		}
		FileInputStream in = new FileInputStream(oldFile);
		//临时加密文件存储目录
		File dirFile = new File(TRANSIT_DIR_ENC);
		//如果临时存储目录不存在或不是目录则直接返回
		if (!dirFile.exists() || !dirFile.isDirectory()){
			
			return null;
		}
		//加密后存储的文件
		File file = new File(dirFile,"enc_" + TimeHandler.getInstance().getTimeInMillis() + "_" + oldFile.getName());
		if (!file.exists()){
			file.createNewFile();
		}
		//读取待加密文件加密后写入加密存储文件中
		FileOutputStream out = new FileOutputStream(file);
		int c, pos, keylen;
		pos = 0;
		keylen = KEYVALUE.length;
		byte buffer[] = new byte[BUFFERLEN];
		while ((c = in.read(buffer)) != -1) {
			for (int i = 0; i < c; i++) {
				buffer[i] ^= KEYVALUE[pos];
				out.write(buffer[i]);
				pos++;
				if (pos == keylen){
					pos = 0;
				}
			}
		}
		in.close();
		out.close();
		
		//返回加密后的文件
		return file;
	}
	
	/**
	 * 文件加密
	 * @param oldFileName:待加密文件路径
	 * @return
	 * @throws IOException 
	 * @throws Exception
	 */
	public static File encryptFile(String oldFileName) throws IOException {
		//如果待加密文件路径不正确则直接返回
		if (oldFileName == null || oldFileName.trim().equals("")){
			
			return null;
		}
		//待加密文件
		File oldFile = new File(oldFileName);
		//如果传入的文件不存在或者不是文件则直接返回
		if (!oldFile.exists() || !oldFile.isFile()){
			
			return null;
		}
		//调用文件加密方法并返回结果
		return encryptFile(oldFile);
	}
	
	/**
	 * 文件解密
	 * @param oldFile:待解密文件
	 * @return
	 * @throws IOException
	 */
	public static File decryptFile(File oldFile) throws IOException{
		//如果待解密文件不存在或者不是文件则直接返回
		if (!oldFile.exists() || !oldFile.isFile()){
			
			return null;
		}
		FileInputStream in = new FileInputStream(oldFile);
		//临时解密文件存储目录
		File dirFile = new File(TRANSIT_DIR_DEC);
		//如果临时解密文件存储目录不存在或不是目录则返回
		if (!dirFile.exists() || !dirFile.isDirectory()){
			
			return null;
		}
		//解密存储文件
		File file = new File(dirFile,"dec_" + TimeHandler.getInstance().getTimeInMillis() + "_" + oldFile.getName().substring(oldFile.getName().lastIndexOf(".")));
		if (!file.exists()){
			file.createNewFile();
		}
		//读取待解密文件并进行解密存储
		FileOutputStream out = new FileOutputStream(file);
		int c, pos, keylen;
		pos = 0;
		keylen = KEYVALUE.length;
		byte buffer[] = new byte[BUFFERLEN];
		while ((c = in.read(buffer)) != -1) {
			for (int i = 0; i < c; i++) {
				buffer[i] ^= KEYVALUE[pos];
				out.write(buffer[i]);
				pos++;
				if (pos == keylen){
					pos = 0;
				}
			}
		}
		in.close();
		out.close();
		
		//返回解密结果文件
		return file;		
	}
	
	/**
	 * 文件解密
	 * @param oldFileName:待解密文件路径
	 * @return
	 * @throws Exception
	 */
	public static File decryptFile(String oldFileName) throws Exception {
		//如果待解密文件路径不正确则直接返回
		if (oldFileName == null || oldFileName.trim().equals("")){
			
			return null;
		}
		//待解密文件
		File oldFile = new File(oldFileName);
		//如果待解密文件不存在或不是文件则直接返回
		if (!oldFile.exists() || !oldFile.isFile()){
			
			return null;
		}
		
		//调用文件解密方法并返回结果
		return decryptFile(oldFile);
	}
}
 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics