做网站有时会处理一些上传下载的文件。可能会用到加解密功能。以下是一个加解密方法。
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);
}
}